macro_rules! impl_writeable_tlv_based_enum { ($st: ident, $(($variant_id: expr, $variant_name: ident) => {$(($type: expr, $field: ident, $fieldty: tt)),* $(,)*} ),* $(,)*; $(($tuple_variant_id: expr, $tuple_variant_name: ident)),* $(,)*) => { ... }; }
Expand description
Implement Readable
and Writeable
for an enum, with struct variants stored as TLVs and tuple
variants stored directly.
The format is, for example
ⓘ
impl_writeable_tlv_based_enum!(EnumName,
(0, StructVariantA) => {(0, required_variant_field, required), (1, optional_variant_field, option)},
(1, StructVariantB) => {(0, variant_field_a, required), (1, variant_field_b, required), (2, variant_vec_field, optional_vec)};
(2, TupleVariantA), (3, TupleVariantB),
);
The type is written as a single byte, followed by any variant data.
Attempts to read an unknown type byte result in DecodeError::UnknownRequiredFeature
.