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/problem.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 server/src/problem.cpp (limited to 'server/src/problem.cpp') diff --git a/server/src/problem.cpp b/server/src/problem.cpp new file mode 100644 index 0000000..3608f38 --- /dev/null +++ b/server/src/problem.cpp @@ -0,0 +1,52 @@ +module; + +#include +#include +#include + +module routemon:problem$impl; + +import :problem; + +namespace routemon::problem { + +auto details::set_detail(blocale::message detail) -> details& +{ + this->detail = detail; + return *this; +} + +auto details::set_instance(std::string&& instance) -> details& +{ + this->instance = instance; + return *this; +} + +auto details::set_instance(std::string_view instance) -> details& +{ + this->instance = std::string{instance}; + return *this; +} + +auto tag_invoke( + json::value_from_tag, json::value& jv, details const& details, + std::locale locale) -> void +{ + auto obj = json::object{ + {"type", details.type_uri}, + {"title", details.title.str(locale)}, + {"status", static_cast(details.status)}, + }; + if (details.detail) + obj["detail"] = details.detail->str(locale); + if (details.instance) + obj["instance"] = *details.instance; + jv = obj; +} + +auto tpl::instantiate() const -> details +{ + return details{status, title, type_uri}; +} + +} // namespace routemon::problem -- cgit v1.3