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