xref: /openbmc/bmcweb/http/verb.hpp (revision c0bdf223)
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     return std::nullopt;
51 }
52 
53 inline std::string_view httpVerbToString(HttpVerb verb)
54 {
55     switch (verb)
56     {
57         case HttpVerb::Delete:
58             return "DELETE";
59         case HttpVerb::Get:
60             return "GET";
61         case HttpVerb::Head:
62             return "HEAD";
63         case HttpVerb::Patch:
64             return "PATCH";
65         case HttpVerb::Post:
66             return "POST";
67         case HttpVerb::Put:
68             return "PUT";
69         case HttpVerb::Options:
70             return "OPTIONS";
71         case HttpVerb::Max:
72             return "";
73     }
74 
75     // Should never reach here
76     return "";
77 }
78