12#include "../microfmt.hpp"
13#include "../reloco.hpp"
15#include <reloco/optional.hpp>
25template <
typename T>
struct formatter<std::optional<T>> {
26 microfmt::string_view forwarded_spec{
""};
30 void format(
const std::optional<T> &opt,
const sink &out)
const noexcept {
31 if (opt.has_value()) {
35 inner_fmt.parse(inner_ctx);
36 inner_fmt.format(*opt, out);
57 microfmt::string_view forwarded_spec{
""};
61 void format(
const reloco::optional<T> &opt,
const sink &out)
const noexcept {
62 if (opt.has_value()) {
66 inner_fmt.parse(inner_ctx);
67 inner_fmt.format(opt.value(), out);
88template <
typename T>
struct formatter<checked_value<T>> {
89 microfmt::string_view forwarded_spec{
""};
93 void format(
const checked_value<T> &val,
const sink &out)
const noexcept {
94 if (val.is_moved_from()) {
95 out.write(
"<moved-from>");
100 inner_fmt.parse(inner_ctx);
101 inner_fmt.format(val.as_known().get(), out);
109template <
typename T,
typename E>
struct formatter<expected<T, E>> {
110 microfmt::string_view forwarded_spec{
""};
114 void format(
const expected<T, E> &exp,
const sink &out)
const noexcept {
115 if (exp.has_value()) {
117 if constexpr (!std::is_void_v<T>) {
120 val_fmt.parse(val_ctx);
121 val_fmt.format(exp.value(), out);
128 err_fmt.parse(err_ctx);
129 err_fmt.format(exp.error(), out);
139#if MICROFMT_HAS_STD_EXPECTED
141template <
typename T,
typename E>
struct formatter<std::expected<T, E>> {
142 microfmt::string_view forwarded_spec{
""};
144 constexpr void parse(format_parse_context &ctx)
noexcept { forwarded_spec = ctx.spec(); }
146 void format(
const std::expected<T, E> &exp,
const sink &out)
const noexcept {
147 if (exp.has_value()) {
149 if constexpr (!std::is_void_v<T>) {
150 formatter<T> val_fmt;
151 format_parse_context val_ctx(forwarded_spec);
152 val_fmt.parse(val_ctx);
153 val_fmt.format(exp.value(), out);
158 formatter<E> err_fmt;
159 format_parse_context err_ctx(forwarded_spec);
160 err_fmt.parse(err_ctx);
161 err_fmt.format(exp.error(), out);
Definition microfmt.hpp:881
reloco::sink sink
Type-erased, zero-allocation output sink.
Definition microfmt.hpp:46
RELOCO_CONSTEXPR20 buffer_sink< N > format(microfmt::string_view fmt, const Args &...args) noexcept
Definition microfmt.hpp:1786
Definition debug_float.hpp:36