blob: 0503d59d798f694009034d06d470e0959724ccdc [file] [log] [blame]
Ed Tanous95c63072024-03-26 13:19:52 -07001#pragma once
2
3#include <boost/system/error_code.hpp>
4#include <boost/url/grammar.hpp>
5#include <boost/url/url_view_base.hpp>
6
7#include <format>
8
9// NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp)
10template <std::derived_from<boost::system::error_code> ErrorCodeType>
11struct std::formatter<ErrorCodeType>
12{
13 constexpr auto parse(std::format_parse_context& ctx)
14 {
15 return ctx.begin();
16 }
17
18 auto format(const ErrorCodeType& ec, auto& ctx) const
19 {
20 return std::format_to(ctx.out(), "{}", ec.what());
21 }
22};
23
24template <std::derived_from<boost::urls::grammar::string_view_base> StringView>
25struct std::formatter<StringView>
26{
27 constexpr auto parse(std::format_parse_context& ctx)
28 {
29 return ctx.begin();
30 }
31 auto format(const StringView& msg, auto& ctx) const
32 {
33 return std::format_to(ctx.out(), "{}",
34 std::string_view(msg.data(), msg.size()));
35 }
36};
37
38template <std::derived_from<boost::urls::url_view_base> UrlBase>
39struct std::formatter<UrlBase>
40{
41 constexpr auto parse(std::format_parse_context& ctx)
42 {
43 return ctx.begin();
44 }
45 auto format(const UrlBase& msg, auto& ctx) const
46 {
47 return std::format_to(ctx.out(), "{}", std::string_view(msg.buffer()));
48 }
49};
50
51template <std::derived_from<boost::core::string_view> StringView>
52struct std::formatter<StringView>
53{
54 constexpr auto parse(std::format_parse_context& ctx)
55 {
56 return ctx.begin();
57 }
58 auto format(const StringView& msg, auto& ctx) const
59 {
60 return std::format_to(ctx.out(), "{}", std::string_view(msg));
61 }
62};
63// NOLINTEND(readability-convert-member-functions-to-static, cert-dcl58-cpp)