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.cppm | 110 ++++---------------------------------------- 1 file changed, 10 insertions(+), 100 deletions(-) (limited to 'server/src/http_common.cppm') diff --git a/server/src/http_common.cppm b/server/src/http_common.cppm index 606a5d5..f56c92b 100644 --- a/server/src/http_common.cppm +++ b/server/src/http_common.cppm @@ -51,119 +51,29 @@ struct supported_verb supported_verb_t value; - supported_verb(supported_verb_t value) : value{value} {} + supported_verb(supported_verb_t value); - static auto 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; - } - } - - 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; - } - } + static auto from(bhttp::verb v) -> std::optional; + + operator bhttp::verb() const; }; export struct verb_set { + bool options : 1 = false; bool delete_ : 1 = false; bool get : 1 = false; bool head : 1 = false; bool post : 1 = false; bool put : 1 = false; - bool options : 1 = false; - auto enable(supported_verb v) -> void - { - switch (v.value) - { - case supported_verb::delete_: - delete_ = true; - break; - case supported_verb::get: - get = true; - break; - case supported_verb::head: - head = true; - break; - case supported_verb::post: - post = true; - break; - case supported_verb::put: - put = true; - break; - case supported_verb::options: - options = true; - break; - default:; - } - } + [[nodiscard]] auto with(supported_verb v) const noexcept -> verb_set; + [[nodiscard]] auto empty() const noexcept -> bool; + [[nodiscard]] auto to_string() const -> std::string; auto operator==(verb_set const& rhs) const noexcept -> bool = default; - - auto empty() const -> bool { return *this == verb_set{}; } - - verb_set(std::initializer_list vs) - { - for (auto const v : vs) - enable(v); - } - - auto 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(); - } }; +static_assert(sizeof(verb_set) == 1); +static_assert(alignof(verb_set) == 1); } // namespace routemon::http -- cgit v1.3