From 32f521775a49b03e663041233f358c6bf8159dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20G=C3=BCndling?= Date: Thu, 19 May 2022 18:16:17 +0200 Subject: [PATCH] serde serialization for topic_namespace --- src/v/model/fundamental.h | 13 +++++++++++++ src/v/model/metadata.h | 18 ++++++++++++++++++ src/v/serde/test/serde_test.cc | 13 +++++++++++++ 3 files changed, 44 insertions(+) diff --git a/src/v/model/fundamental.h b/src/v/model/fundamental.h index 99d894c56b4c..c058ba1af5f2 100644 --- a/src/v/model/fundamental.h +++ b/src/v/model/fundamental.h @@ -11,7 +11,9 @@ #pragma once +#include "bytes/iobuf.h" #include "seastarx.h" +#include "serde/serde.h" #include "ssx/sformat.h" #include "utils/named_type.h" #include "vassert.h" @@ -89,6 +91,17 @@ class topic : public named_type { topic(model::topic_view view) // NOLINT - see topic_view_tests.cc : named_type(ss::sstring(view())) {} + friend void + read_nested(iobuf_parser& in, topic& t, size_t const bytes_left_limit) { + using serde::read_nested; + return read_nested(in, t._value, bytes_left_limit); + } + + friend void write(iobuf& out, topic t) { + using serde::write; + return write(out, std::move(t._value)); + } + operator topic_view() { return topic_view(_value); } operator topic_view() const { return topic_view(_value); } diff --git a/src/v/model/metadata.h b/src/v/model/metadata.h index 720ef31f7240..bfba6b268630 100644 --- a/src/v/model/metadata.h +++ b/src/v/model/metadata.h @@ -14,6 +14,7 @@ #include "model/fundamental.h" #include "net/unresolved_address.h" #include "seastarx.h" +#include "serde/envelope.h" #include "utils/named_type.h" #include @@ -245,6 +246,8 @@ struct topic_namespace_view { }; struct topic_namespace { + topic_namespace() = default; + topic_namespace(model::ns n, model::topic t) : ns(std::move(n)) , tp(std::move(t)) {} @@ -271,6 +274,21 @@ struct topic_namespace { return H::combine(std::move(h), tp_ns.ns, tp_ns.tp); } + friend void write(iobuf& out, topic_namespace t) { + using serde::write; + write(out, std::move(t.ns)); + write(out, std::move(t.tp)); + } + + friend void read_nested( + iobuf_parser& in, + topic_namespace& t, + std::size_t const bytes_left_limit) { + using serde::read_nested; + read_nested(in, t.ns, bytes_left_limit); + read_nested(in, t.tp, bytes_left_limit); + } + model::ns ns; model::topic tp; diff --git a/src/v/serde/test/serde_test.cc b/src/v/serde/test/serde_test.cc index 51bd24f74203..2d56582eb029 100644 --- a/src/v/serde/test/serde_test.cc +++ b/src/v/serde/test/serde_test.cc @@ -9,6 +9,7 @@ #include "hashing/crc32c.h" #include "model/fundamental.h" +#include "model/metadata.h" #include "serde/envelope.h" #include "serde/serde.h" #include "utils/fragmented_vector.h" @@ -695,3 +696,15 @@ SEASTAR_THREAD_TEST_CASE(fragmented_vector_test) { v_out.begin(), v_out.end(), v_in_copy.begin(), v_in_copy.end()); } } + +SEASTAR_THREAD_TEST_CASE(serde_topic_namespace_test) { + iobuf b; + { + model::topic_namespace tn{model::ns{"abc"}, model::topic{"def"}}; + b = serde::to_iobuf(std::move(tn)); + } + + auto tn = serde::from_iobuf(std::move(b)); + BOOST_CHECK_EQUAL(tn.ns, "abc"); + BOOST_CHECK_EQUAL(tn.tp, "def"); +}