diff --git a/gms/gossip_digest.hh b/gms/gossip_digest.hh index a4e3332cff..abe377d994 100644 --- a/gms/gossip_digest.hh +++ b/gms/gossip_digest.hh @@ -11,6 +11,7 @@ #pragma once #include +#include #include "gms/inet_address.hh" #include "gms/generation-number.hh" #include "gms/version_generator.hh" @@ -55,10 +56,13 @@ public: return x._max_version < y._max_version; } - friend inline std::ostream& operator<<(std::ostream& os, const gossip_digest& d) { - fmt::print(os, "{}:{}:{}", d._endpoint, d._generation, d._max_version); - return os; - } + friend fmt::formatter; }; // class gossip_digest } // namespace gms + +template <> struct fmt::formatter : fmt::formatter { + auto format(const gms::gossip_digest& d, fmt::format_context& ctx) const { + return fmt::format_to(ctx.out(), "{}:{}:{}", d._endpoint, d._generation, d._max_version); + } +}; diff --git a/gms/gossip_digest_ack.cc b/gms/gossip_digest_ack.cc index 08c4232424..9420378e61 100644 --- a/gms/gossip_digest_ack.cc +++ b/gms/gossip_digest_ack.cc @@ -9,21 +9,18 @@ */ #include "gms/gossip_digest_ack.hh" -#include -namespace gms { - -std::ostream& operator<<(std::ostream& os, const gossip_digest_ack& ack) { - os << "digests:{"; +auto fmt::formatter::format(const gms::gossip_digest_ack& ack, fmt::format_context& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + out = fmt::format_to(out, "digests:{{"); for (auto& d : ack._digests) { - os << d << " "; + out = fmt::format_to(out, "{} ", d); } - os << "} "; - os << "endpoint_state:{"; + out = fmt::format_to(out, "}} "); + out = fmt::format_to(out, "endpoint_state:{{"); for (auto& d : ack._map) { - fmt::print(os, "[{}->{}]", d.first, d.second); + out = fmt::format_to(out, "[{}->{}]", d.first, d.second); } - return os << "}"; + return fmt::format_to(out, "}}"); } - -} // namespace gms diff --git a/gms/gossip_digest_ack.hh b/gms/gossip_digest_ack.hh index b2c5ea9814..34c17d0d1d 100644 --- a/gms/gossip_digest_ack.hh +++ b/gms/gossip_digest_ack.hh @@ -15,6 +15,7 @@ #include "gms/inet_address.hh" #include "gms/endpoint_state.hh" #include "utils/chunked_vector.hh" +#include namespace gms { @@ -48,7 +49,11 @@ public: return _map; } - friend std::ostream& operator<<(std::ostream& os, const gossip_digest_ack& ack); + friend fmt::formatter; }; } + +template <> struct fmt::formatter : fmt::formatter { + auto format(const gms::gossip_digest_ack&, fmt::format_context& ctx) const -> decltype(ctx.out()); +}; diff --git a/gms/gossip_digest_syn.cc b/gms/gossip_digest_syn.cc index 9da5c96b1a..442261d61f 100644 --- a/gms/gossip_digest_syn.cc +++ b/gms/gossip_digest_syn.cc @@ -9,17 +9,15 @@ */ #include "gms/gossip_digest_syn.hh" -#include -namespace gms { - -std::ostream& operator<<(std::ostream& os, const gossip_digest_syn& syn) { - os << "cluster_id:" << syn._cluster_id << ",partioner:" << syn._partioner << ",group0_id:" << syn._group0_id << ","; - os << "digests:{"; +auto fmt::formatter::format(const gms::gossip_digest_syn& syn, fmt::format_context& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + // out = fmt::format_to(out, "cluster_id:{},partioner:{},group0_id{}," + // syn._cluster_id, syn._partioner, syn._group0_id); + out = fmt::format_to(out, "digests:{{"); for (auto& d : syn._digests) { - os << d << " "; + out = fmt::format_to(out, "{} ", d); } - return os << "}"; + return fmt::format_to(out, "}}"); } - -} // namespace gms diff --git a/gms/gossip_digest_syn.hh b/gms/gossip_digest_syn.hh index 257e10ae22..130f20b17b 100644 --- a/gms/gossip_digest_syn.hh +++ b/gms/gossip_digest_syn.hh @@ -11,6 +11,7 @@ #pragma once #include +#include #include "utils/serialization.hh" #include "gms/gossip_digest.hh" #include "utils/chunked_vector.hh" @@ -67,7 +68,11 @@ public: return _digests; } - friend std::ostream& operator<<(std::ostream& os, const gossip_digest_syn& syn); + friend fmt::formatter; }; } + +template <> struct fmt::formatter : fmt::formatter { + auto format(const gms::gossip_digest_syn&, fmt::format_context& ctx) const -> decltype(ctx.out()); +};