diff options
Diffstat (limited to 'include/boost_formatters.hpp')
-rw-r--r-- | include/boost_formatters.hpp | 63 |
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) |