xref: /openbmc/bmcweb/http/verb.hpp (revision 17c47245)
1 #pragma once
2 
3 #include <boost/beast/http/verb.hpp>
4 
5 #include <optional>
6 #include <string_view>
7 
8 enum class HttpVerb
9 {
10     Delete = 0,
11     Get,
12     Head,
13     Options,
14     Patch,
15     Post,
16     Put,
17     Max,
18 };
19 
20 static constexpr size_t maxVerbIndex = static_cast<size_t>(HttpVerb::Max) - 1U;
21 
22 // MaxVerb + 1 is designated as the "not found" verb.  It is done this way
23 // to keep the BaseRule as a single bitfield (thus keeping the struct small)
24 // while still having a way to declare a route a "not found" route.
25 static constexpr const size_t notFoundIndex = maxVerbIndex + 1;
26 static constexpr const size_t methodNotAllowedIndex = notFoundIndex + 1;
27 
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 
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