Macro impl_writeable_tlv_based
macro_rules! impl_writeable_tlv_based {
($st: ident, {$(($type: expr, $field: ident, $fieldty: tt)),* $(,)*}) => { ... };
}Expand description
Implements Readable/Writeable for a struct storing it as a set of TLVs
If $fieldty is required, then $field is a required field that is not an Option nor a Vec.
If $fieldty is (default_value, $default), then $field will be set to $default if not present.
If $fieldty is option, then $field is optional field.
If $fieldty is optional_vec, then $field is a Vec, which needs to have its individual elements serialized.
Note that for optional_vec no bytes are written if the vec is empty
For example,
struct LightningMessage {
tlv_integer: u32,
tlv_default_integer: u32,
tlv_optional_integer: Option<u32>,
tlv_vec_type_integer: Vec<u32>,
}
impl_writeable_tlv_based!(LightningMessage, {
(0, tlv_integer, required),
(1, tlv_default_integer, (default_value, 7)),
(2, tlv_optional_integer, option),
(3, tlv_vec_type_integer, optional_vec),
});