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