summaryrefslogtreecommitdiff
path: root/include/boost_formatters.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/boost_formatters.hpp')
-rw-r--r--include/boost_formatters.hpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/include/boost_formatters.hpp b/include/boost_formatters.hpp
new file mode 100644
index 0000000000..0503d59d79
--- /dev/null
+++ b/include/boost_formatters.hpp
@@ -0,0 +1,63 @@
+#pragma once
+
+#include <boost/system/error_code.hpp>
+#include <boost/url/grammar.hpp>
+#include <boost/url/url_view_base.hpp>
+
+#include <format>
+
+// NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp)
+template <std::derived_from<boost::system::error_code> ErrorCodeType>
+struct std::formatter<ErrorCodeType>
+{
+ constexpr auto parse(std::format_parse_context& ctx)
+ {
+ return ctx.begin();
+ }
+
+ auto format(const ErrorCodeType& ec, auto& ctx) const
+ {
+ return std::format_to(ctx.out(), "{}", ec.what());
+ }
+};
+
+template <std::derived_from<boost::urls::grammar::string_view_base> StringView>
+struct std::formatter<StringView>
+{
+ constexpr auto parse(std::format_parse_context& ctx)
+ {
+ return ctx.begin();
+ }
+ auto format(const StringView& msg, auto& ctx) const
+ {
+ return std::format_to(ctx.out(), "{}",
+ std::string_view(msg.data(), msg.size()));
+ }
+};
+
+template <std::derived_from<boost::urls::url_view_base> UrlBase>
+struct std::formatter<UrlBase>
+{
+ constexpr auto parse(std::format_parse_context& ctx)
+ {
+ return ctx.begin();
+ }
+ auto format(const UrlBase& msg, auto& ctx) const
+ {
+ return std::format_to(ctx.out(), "{}", std::string_view(msg.buffer()));
+ }
+};
+
+template <std::derived_from<boost::core::string_view> StringView>
+struct std::formatter<StringView>
+{
+ constexpr auto parse(std::format_parse_context& ctx)
+ {
+ return ctx.begin();
+ }
+ auto format(const StringView& msg, auto& ctx) const
+ {
+ return std::format_to(ctx.out(), "{}", std::string_view(msg));
+ }
+};
+// NOLINTEND(readability-convert-member-functions-to-static, cert-dcl58-cpp)