Skip to content

Commit 6a338ac

Browse files
committed
Expose impl_writeable_msg
1 parent 153b048 commit 6a338ac

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

lightning/src/util/ser_macros.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,35 @@ macro_rules! _decode_tlv_stream_range {
457457
} }
458458
}
459459

460+
/// Implements [`Readable`]/[`Writeable`] for a message struct that may include non-TLV and
461+
/// TLV-encoded parts.
462+
///
463+
/// This is useful to implement a [`CustomMessageReader`].
464+
///
465+
/// If `$fieldty` is `required`, then `$tlvfield` is a required field that is not an [`Option`] nor a [`Vec`].
466+
/// If `$fieldty` is `(default_value, $default)`, then `$tlvfield` will be set to `$default` if not present.
467+
/// If `$fieldty` is `option`, then `$tlvfield` is optional field.
468+
/// If `$fieldty` is `vec_type`, then `$tlvfield` is a [`Vec`], which needs to have its individual elements serialized.
469+
///
470+
/// For example,
471+
/// ```
472+
/// # use lightning::impl_writeable_msg;
473+
/// impl_writeable_msg!(MyCustomMessage, {
474+
/// field_1,
475+
/// field_2,
476+
/// field_3,
477+
/// }{
478+
/// (0, tlv_integer, required),
479+
/// (1, tlv_default_integer, (default_value, 7)),
480+
/// (2, tlv_optional_integer, option),
481+
/// (3, tlv_vec_type_integer, vec_type),
482+
/// });
483+
/// ```
484+
///
485+
/// [`Readable`]: crate::util::ser::Readable
486+
/// [`Writeable`]: crate::util::ser::Writeable
487+
/// [`CustomMessageReader`]: crate::ln::wire::CustomMessageReader
488+
#[macro_export]
460489
macro_rules! impl_writeable_msg {
461490
($st:ident, {$($field:ident),* $(,)*}, {$(($type: expr, $tlvfield: ident, $fieldty: tt)),* $(,)*}) => {
462491
impl $crate::util::ser::Writeable for $st {
@@ -642,10 +671,10 @@ macro_rules! _init_and_read_tlv_fields {
642671
}
643672

644673
/// Implements [`Readable`]/[`Writeable`] for a struct storing it as a set of TLVs
645-
/// If `$fieldty` is `required`, then `$field` is a required field that is not an Option nor a Vec.
674+
/// If `$fieldty` is `required`, then `$field` is a required field that is not an [`Option`] nor a [`Vec`].
646675
/// If `$fieldty` is `(default_value, $default)`, then `$field` will be set to `$default` if not present.
647676
/// If `$fieldty` is `option`, then `$field` is optional field.
648-
/// If `$fieldty` is `vec_type`, then `$field` is a Vec, which needs to have its individual elements serialized.
677+
/// If `$fieldty` is `vec_type`, then `$field` is a [`Vec`], which needs to have its individual elements serialized.
649678
///
650679
/// For example,
651680
/// ```

0 commit comments

Comments
 (0)