di 0.1.0
Loading...
Searching...
No Matches
variant.h
Go to the documentation of this file.
1#pragma once
2
10#include "di/meta/util.h"
12
13namespace di::format {
14template<concepts::Formattable... Types, concepts::Encoding Enc>
16 auto do_output = [](concepts::FormatContext auto& context,
17 concepts::DecaySameAs<Variant<Types...>> auto&& variant) -> Result<void> {
18 return di::visit(
19 [&](auto&& value) -> Result<void> {
20 return vpresent_encoded_context<meta::Encoding<decltype(context)>>(
21 u8"{}"_sv, format::make_format_args<decltype(context)>(value), context, true);
22 },
23 variant);
24 };
25 return Result<decltype(do_output)>(util::move(do_output));
26}
27
28template<concepts::Formattable T, concepts::Formattable E, concepts::Encoding Enc>
30 auto do_output = [](concepts::FormatContext auto& context,
32 if (expected.has_value()) {
33 return vpresent_encoded_context<meta::Encoding<decltype(context)>>(
34 u8"{}"_sv, format::make_format_args<decltype(context)>(expected.value()), context, true);
35 }
36
37 (void) context.output(U'U');
38 (void) context.output(U'n');
39 (void) context.output(U'e');
40 (void) context.output(U'x');
41 (void) context.output(U'p');
42 (void) context.output(U'e');
43 (void) context.output(U'c');
44 (void) context.output(U't');
45 (void) context.output(U'e');
46 (void) context.output(U'd');
47 (void) context.output(U'(');
48 auto result = vpresent_encoded_context<meta::Encoding<decltype(context)>>(
49 u8"{}"_sv, format::make_format_args<decltype(context)>(expected.error()), context, true);
50 (void) context.output(U')');
51 return result;
52 };
53 return Result<decltype(do_output)>(util::move(do_output));
54}
55}
Definition format_parse_context.h:14
Definition expected_forward_declaration.h:8
Definition variant.h:30
Definition util.h:59
Definition format_context.h:9
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
meta::RemoveCVRef< T >::Encoding Encoding
Definition encoding.h:230
__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 tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto visit(Vis &&visitor, Vars &&... variants) -> R
Definition visit.h:39
Definition in_place_type.h:5