2 #include <ossia/detail/config.hpp>
3 #if defined(OSSIA_HAS_FMT)
4 #include <ossia/detail/flat_set.hpp>
5 #include <ossia/detail/fmt.hpp>
6 #include <ossia/detail/optional.hpp>
7 #include <ossia/network/value/value.hpp>
9 #include <boost/algorithm/string/replace.hpp>
11 #include <fmt/ranges.h>
14 template <
typename T>
class is_container_adaptor_like<boost::container::flat_set<T>>
15 :
public std::false_type {
22 using fmt_ctx = fmt::basic_format_context<fmt::appender, char>;
24 struct value_prettyprint_visitor
27 fmt_ctx::iterator operator()(impulse)
const;
28 fmt_ctx::iterator operator()(int32_t i)
const;
29 fmt_ctx::iterator operator()(
float f)
const;
30 fmt_ctx::iterator operator()(
bool b)
const;
31 fmt_ctx::iterator operator()(
char c)
const;
32 fmt_ctx::iterator operator()(std::string str)
const;
33 fmt_ctx::iterator operator()(vec2f vec)
const;
34 fmt_ctx::iterator operator()(vec3f vec)
const;
35 fmt_ctx::iterator operator()(vec4f vec)
const;
36 fmt_ctx::iterator operator()(
const std::vector<ossia::value>& t)
const;
37 fmt_ctx::iterator operator()(
const value_map_type& t)
const;
38 fmt_ctx::iterator operator()()
const;
45 struct formatter<std::optional<T>>
47 template <
typename ParseContext>
48 constexpr
auto parse(ParseContext& ctx)
53 template <
typename FormatContext>
54 auto format(
const std::optional<T>& n, FormatContext& ctx)
const
58 return fmt::format_to(ctx.out(),
"{}", *n);
62 return fmt::format_to(ctx.out(),
"none");
68 struct formatter<
ossia::value>
70 template <
typename ParseContext>
71 constexpr
auto parse(ParseContext& ctx)
76 template <
typename FormatContext>
77 auto format(
const ossia::value& v, FormatContext& ctx)
const
79 return v.apply(ossia::value_prettyprint_visitor{ctx});
88 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(impulse)
const
90 return fmt::format_to(ctx.out(),
"impulse");
93 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(int32_t i)
const
95 return fmt::format_to(ctx.out(),
"int: {}", i);
98 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(
float f)
const
100 return fmt::format_to(ctx.out(),
"float: {}", f);
103 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(
bool b)
const
105 return fmt::format_to(ctx.out(),
"bool: {}", b ?
"true" :
"false");
108 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(
char c)
const
110 return fmt::format_to(ctx.out(),
"char: '{}'", c);
113 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(std::string str)
const
115 boost::algorithm::replace_all(str,
"\"",
"\\\"");
116 return fmt::format_to(ctx.out(),
"string: \"{}\"", str);
119 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(vec2f vec)
const
121 return fmt::format_to(ctx.out(),
"vec2f: {}", vec);
124 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(vec3f vec)
const
126 return fmt::format_to(ctx.out(),
"vec3f: {}", vec);
129 inline fmt_ctx::iterator value_prettyprint_visitor::operator()(vec4f vec)
const
131 return fmt::format_to(ctx.out(),
"vec4f: {}", vec);
134 inline fmt_ctx::iterator
135 value_prettyprint_visitor::operator()(
const std::vector<value>& t)
const
137 return fmt::format_to(ctx.out(),
"list: {}", t);
140 inline fmt_ctx::iterator
141 value_prettyprint_visitor::operator()(
const value_map_type& t)
const
143 return fmt::format_to(ctx.out(),
"map: {}", t);
146 inline fmt_ctx::iterator value_prettyprint_visitor::operator()()
const
148 return fmt::format_to(ctx.out(),
"invalid");
The value class.
Definition: value.hpp:173