3#include <md/object.hpp>
4#include <md/ostream.hpp>
14struct CompactJsonFormatter {
15 template <
class ParseCtx>
16 constexpr auto parse(ParseCtx& ctx) ->
typename ParseCtx::iterator {
17 auto it = ctx.begin();
19 if (it != end && *it !=
'}') {
20 throw std::format_error(
21 "metadata formatter: only the default (empty) format spec is supported");
26 template <
class FormatCtx>
27 auto format(
const T& v, FormatCtx& ctx)
const ->
typename FormatCtx::iterator {
28 std::ostringstream os;
29 detail::write_json(os, v);
30 const std::string s = os.str();
31 return std::ranges::copy(s, ctx.out()).out;
39struct std::formatter<md::Value, char> : md::detail::CompactJsonFormatter<md::Value> {};
43struct std::formatter<md::Object, char> : md::detail::CompactJsonFormatter<md::Object> {};
47struct std::formatter<md::Array, char> : md::detail::CompactJsonFormatter<md::Array> {};