From 75c685ba29ef96477351631db117db30711ecf8b Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Thu, 13 Jul 2023 08:57:08 -0500 Subject: [PATCH] common: fix fmtlib v8 handling of OpSchedItem by providing a formatter for Message & derivatives that is implemented directly (not using operator<<). This is only a first step, to be followed by an implementation of a usable print() function for Message & co. Signed-off-by: Ronen Friedman --- src/msg/Message.h | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/msg/Message.h b/src/msg/Message.h index c54bba7b665..7af72a8d74c 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -591,8 +591,19 @@ MURef make_message(Args&&... args) { } } -#if FMT_VERSION >= 90000 -template M> struct fmt::formatter : fmt::ostream_formatter {}; -#endif +template M> +struct fmt::formatter { + constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); } + template + auto format(const M& m, FormatContext& ctx) const { + std::ostringstream oss; + m.print(oss); + if (auto ver = m.get_header().version; ver) { + return fmt::format_to(ctx.out(), "{} v{}", oss.str(), ver); + } else { + return fmt::format_to(ctx.out(), "{}", oss.str()); + } + } +}; #endif -- 2.39.5