Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
format_impl.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace di::format {
11template<concepts::ReflectableToFields T, concepts::Encoding Enc>
13 auto do_output = [=](concepts::FormatContext auto& context, T const& value) -> Result<void> {
14 auto reflection_value = reflection::reflect(value);
15 for (auto ch : reflection_value.name) {
16 context.output(ch);
17 }
18 context.output(' ');
19 context.output('{');
20 context.output(' ');
21 bool first = true;
23 [&](auto field) {
24 if (!first) {
25 context.output(',');
26 context.output(' ');
27 }
28 first = false;
29
30 for (auto ch : field.name) {
31 context.output(ch);
32 }
33 context.output(':');
34 context.output(' ');
35 (void) vpresent_encoded_context<meta::Encoding<decltype(context)>>(
36 u8"{}"_sv, format::make_format_args<decltype(context)>(field.get(value)), context, true);
37 },
38 reflection_value);
39
40 context.output(' ');
41 context.output('}');
42 return {};
43 };
44 return Result<decltype(do_output)>(util::move(do_output));
45}
46
47template<concepts::ReflectableToEnumerators T, concepts::Encoding Enc>
48constexpr auto tag_invoke(types::Tag<formatter_in_place>, InPlaceType<T>, FormatParseContext<Enc>& parse_context,
49 bool debug) {
50 return format::formatter<container::StringView, Enc>(parse_context, debug) %
51 [](concepts::CopyConstructible auto formatter) {
52 return [=](concepts::FormatContext auto& context, T value) {
53 return formatter(context, reflection::enum_to_string(value));
54 };
55 };
56}
57}
Definition format_parse_context.h:14
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
Definition bounded_format_context.h:7
constexpr auto make_format_args(Types &&... values)
Definition make_format_args.h:9
constexpr auto vpresent_encoded_context
Definition vpresent_encoded_context.h:61
constexpr auto formatter(FormatParseContext< Enc > &parse_context, bool debug=false)
Definition formatter.h:27
constexpr auto value
Definition value.h:34
meta::RemoveCVRef< T >::Encoding Encoding
Definition encoding.h:230
constexpr auto enum_to_string
Definition enum_to_string.h:25
constexpr auto reflect
Definition reflect.h:46
__UINT8_TYPE__ u8
Definition integers.h:9
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Expected< T, Error > Result
Definition result.h:8
constexpr void tuple_for_each(F &&function, Tup &&tuple)
Definition tuple_for_each.h:22
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto field
Definition field.h:42
@ T
Definition key.h:29