1*95c6307aSEd Tanous #pragma once
2*95c6307aSEd Tanous 
3*95c6307aSEd Tanous #include <nlohmann/json.hpp>
4*95c6307aSEd Tanous 
5*95c6307aSEd Tanous #include <format>
6*95c6307aSEd Tanous 
7*95c6307aSEd Tanous // Clang-tidy would rather these be static, but using static causes the template
8*95c6307aSEd Tanous // specialization to not function.  Ignore the warning.
9*95c6307aSEd Tanous // NOLINTBEGIN(readability-convert-member-functions-to-static, cert-dcl58-cpp)
10*95c6307aSEd Tanous 
11*95c6307aSEd Tanous template <>
12*95c6307aSEd Tanous struct std::formatter<nlohmann::json::json_pointer>
13*95c6307aSEd Tanous {
parsestd::formatter14*95c6307aSEd Tanous     constexpr auto parse(std::format_parse_context& ctx)
15*95c6307aSEd Tanous     {
16*95c6307aSEd Tanous         return ctx.begin();
17*95c6307aSEd Tanous     }
formatstd::formatter18*95c6307aSEd Tanous     auto format(const nlohmann::json::json_pointer& ptr, auto& ctx) const
19*95c6307aSEd Tanous     {
20*95c6307aSEd Tanous         return std::format_to(ctx.out(), "{}", ptr.to_string());
21*95c6307aSEd Tanous     }
22*95c6307aSEd Tanous };
23*95c6307aSEd Tanous 
24*95c6307aSEd Tanous template <>
25*95c6307aSEd Tanous struct std::formatter<nlohmann::json>
26*95c6307aSEd Tanous {
parsestd::formatter27*95c6307aSEd Tanous     static constexpr auto parse(std::format_parse_context& ctx)
28*95c6307aSEd Tanous     {
29*95c6307aSEd Tanous         return ctx.begin();
30*95c6307aSEd Tanous     }
formatstd::formatter31*95c6307aSEd Tanous     auto format(const nlohmann::json& json, auto& ctx) const
32*95c6307aSEd Tanous     {
33*95c6307aSEd Tanous         return std::format_to(
34*95c6307aSEd Tanous             ctx.out(), "{}",
35*95c6307aSEd Tanous             json.dump(-1, ' ', false,
36*95c6307aSEd Tanous                       nlohmann::json::error_handler_t::replace));
37*95c6307aSEd Tanous     }
38*95c6307aSEd Tanous };
39*95c6307aSEd Tanous // NOLINTEND(readability-convert-member-functions-to-static, cert-dcl58-cpp)
40