summaryrefslogtreecommitdiffstats
path: root/server/src/http_common.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/http_common.cpp')
-rw-r--r--server/src/http_common.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/server/src/http_common.cpp b/server/src/http_common.cpp
new file mode 100644
index 0000000..1c60d60
--- /dev/null
+++ b/server/src/http_common.cpp
@@ -0,0 +1,108 @@
1module;
2
3#include <boost/beast/core.hpp>
4#include <boost/beast/http.hpp>
5
6module routemon:http.common$impl;
7
8import :http.common;
9
10namespace routemon::http {
11
12supported_verb::supported_verb(supported_verb_t value) : value{value} {}
13
14auto supported_verb::from(bhttp::verb v) -> std::optional<supported_verb>
15{
16 switch (v)
17 {
18 case bhttp::verb::options:
19 return supported_verb::options;
20 case bhttp::verb::delete_:
21 return supported_verb::delete_;
22 case bhttp::verb::get:
23 return supported_verb::get;
24 case bhttp::verb::head:
25 return supported_verb::head;
26 case bhttp::verb::post:
27 return supported_verb::post;
28 case bhttp::verb::put:
29 return supported_verb::put;
30 default:
31 return std::nullopt;
32 }
33}
34
35supported_verb::operator bhttp::verb() const
36{
37 switch (value)
38 {
39 case supported_verb::options:
40 return bhttp::verb::options;
41 case supported_verb::delete_:
42 return bhttp::verb::delete_;
43 case supported_verb::get:
44 return bhttp::verb::get;
45 case supported_verb::head:
46 return bhttp::verb::head;
47 case supported_verb::post:
48 return bhttp::verb::post;
49 case supported_verb::put:
50 return bhttp::verb::put;
51 }
52}
53
54auto verb_set::with(supported_verb v) const noexcept -> verb_set
55{
56 auto set = verb_set{*this};
57 switch (v.value)
58 {
59 case supported_verb::delete_:
60 set.delete_ = true;
61 return set;
62 case supported_verb::get:
63 set.get = true;
64 return set;
65 case supported_verb::head:
66 set.head = true;
67 return set;
68 case supported_verb::post:
69 set.post = true;
70 return set;
71 case supported_verb::put:
72 set.put = true;
73 return set;
74 case supported_verb::options:
75 set.options = true;
76 return set;
77 }
78}
79
80auto verb_set::empty() const noexcept -> bool { return *this == verb_set{}; }
81
82auto verb_set::to_string() const -> std::string
83{
84 std::ostringstream ss;
85 bool wrote = false;
86 auto write = [&](bhttp::verb v)
87 {
88 if (wrote)
89 ss << ", ";
90 ss << v;
91 wrote = true;
92 };
93 if (delete_)
94 write(bhttp::verb::delete_);
95 if (get)
96 write(bhttp::verb::get);
97 if (head)
98 write(bhttp::verb::head);
99 if (post)
100 write(bhttp::verb::post);
101 if (put)
102 write(bhttp::verb::put);
103 if (options)
104 write(bhttp::verb::options);
105 return ss.str();
106}
107
108} // namespace routemon::http