From 52b3cd46c76fd4be18aeb8422a08a073484b9fad Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Sat, 29 Aug 2026 12:01:42 +0200 Subject: More module implementation partition units --- server/src/http_common.cpp | 108 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 server/src/http_common.cpp (limited to 'server/src/http_common.cpp') 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 @@ +module; + +#include +#include + +module routemon:http.common$impl; + +import :http.common; + +namespace routemon::http { + +supported_verb::supported_verb(supported_verb_t value) : value{value} {} + +auto supported_verb::from(bhttp::verb v) -> std::optional +{ + switch (v) + { + case bhttp::verb::options: + return supported_verb::options; + case bhttp::verb::delete_: + return supported_verb::delete_; + case bhttp::verb::get: + return supported_verb::get; + case bhttp::verb::head: + return supported_verb::head; + case bhttp::verb::post: + return supported_verb::post; + case bhttp::verb::put: + return supported_verb::put; + default: + return std::nullopt; + } +} + +supported_verb::operator bhttp::verb() const +{ + switch (value) + { + case supported_verb::options: + return bhttp::verb::options; + case supported_verb::delete_: + return bhttp::verb::delete_; + case supported_verb::get: + return bhttp::verb::get; + case supported_verb::head: + return bhttp::verb::head; + case supported_verb::post: + return bhttp::verb::post; + case supported_verb::put: + return bhttp::verb::put; + } +} + +auto verb_set::with(supported_verb v) const noexcept -> verb_set +{ + auto set = verb_set{*this}; + switch (v.value) + { + case supported_verb::delete_: + set.delete_ = true; + return set; + case supported_verb::get: + set.get = true; + return set; + case supported_verb::head: + set.head = true; + return set; + case supported_verb::post: + set.post = true; + return set; + case supported_verb::put: + set.put = true; + return set; + case supported_verb::options: + set.options = true; + return set; + } +} + +auto verb_set::empty() const noexcept -> bool { return *this == verb_set{}; } + +auto verb_set::to_string() const -> std::string +{ + std::ostringstream ss; + bool wrote = false; + auto write = [&](bhttp::verb v) + { + if (wrote) + ss << ", "; + ss << v; + wrote = true; + }; + if (delete_) + write(bhttp::verb::delete_); + if (get) + write(bhttp::verb::get); + if (head) + write(bhttp::verb::head); + if (post) + write(bhttp::verb::post); + if (put) + write(bhttp::verb::put); + if (options) + write(bhttp::verb::options); + return ss.str(); +} + +} // namespace routemon::http -- cgit v1.3