xref: /openbmc/bmcweb/http/verb.hpp (revision d78572018fc2022091ff8b8eb5a7fef2172ba3d6)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #pragma once
4 
5 #include <boost/beast/http/verb.hpp>
6 
7 #include <cstddef>
8 #include <optional>
9 // boost/beast/http/verb for whatever reason requires this?
10 // NOLINTNEXTLINE(misc-include-cleaner)
11 #include <ostream>
12 #include <string_view>
13 
14 enum class HttpVerb
15 {
16     Delete = 0,
17     Get,
18     Head,
19     Options,
20     Patch,
21     Post,
22     Put,
23     Max,
24 };
25 
26 static constexpr size_t maxVerbIndex = static_cast<size_t>(HttpVerb::Max) - 1U;
27 
httpVerbFromBoost(boost::beast::http::verb bv)28 inline std::optional<HttpVerb> httpVerbFromBoost(boost::beast::http::verb bv)
29 {
30     switch (bv)
31     {
32         case boost::beast::http::verb::delete_:
33             return HttpVerb::Delete;
34         case boost::beast::http::verb::get:
35             return HttpVerb::Get;
36         case boost::beast::http::verb::head:
37             return HttpVerb::Head;
38         case boost::beast::http::verb::options:
39             return HttpVerb::Options;
40         case boost::beast::http::verb::patch:
41             return HttpVerb::Patch;
42         case boost::beast::http::verb::post:
43             return HttpVerb::Post;
44         case boost::beast::http::verb::put:
45             return HttpVerb::Put;
46         default:
47             return std::nullopt;
48     }
49 }
50 
httpVerbToString(HttpVerb verb)51 inline std::string_view httpVerbToString(HttpVerb verb)
52 {
53     switch (verb)
54     {
55         case HttpVerb::Delete:
56             return "DELETE";
57         case HttpVerb::Get:
58             return "GET";
59         case HttpVerb::Head:
60             return "HEAD";
61         case HttpVerb::Patch:
62             return "PATCH";
63         case HttpVerb::Post:
64             return "POST";
65         case HttpVerb::Put:
66             return "PUT";
67         case HttpVerb::Options:
68             return "OPTIONS";
69         default:
70             return "";
71     }
72 
73     // Should never reach here
74     return "";
75 }
76