diff --git a/src/v/serde/rw/envelope.h b/src/v/serde/rw/envelope.h index 4aa3ff30af19..71c5aa8ca2f0 100644 --- a/src/v/serde/rw/envelope.h +++ b/src/v/serde/rw/envelope.h @@ -29,6 +29,9 @@ concept has_serde_read = requires(T t, iobuf_parser& in, const header& h) { t.serde_read(in, h); }; +template +concept has_serde_fields = requires(T t) { t.serde_fields(); }; + template requires is_envelope> void tag_invoke( @@ -61,6 +64,7 @@ void tag_invoke( } if constexpr (has_serde_read) { + static_assert(!has_serde_fields); t.serde_read(in, h); } else { envelope_for_each_field(t, [&](auto& f) { @@ -104,6 +108,7 @@ void tag_invoke(tag_t, iobuf& out, T t) { auto const size_before = out.size_bytes(); if constexpr (has_serde_write) { + static_assert(!has_serde_fields); t.serde_write(out); } else { envelope_for_each_field(