Document some TLV write/read formats 2023-07-kill-vec_type
authorMatt Corallo <git@bluematt.me>
Mon, 10 Jul 2023 22:24:31 +0000 (22:24 +0000)
committerMatt Corallo <git@bluematt.me>
Tue, 11 Jul 2023 16:20:03 +0000 (16:20 +0000)
While we don't want to publicly document these and support them for
downstream crates, documenting them internally is useful.

lightning/src/util/ser_macros.rs

index 90393f9da0ca0fcfe58a5bd24d84e504617e0ac0..710085e2bbd5fa91cff4fea09d3065eda919bb50 100644 (file)
 //! [`Readable`]: crate::util::ser::Readable
 //! [`Writeable`]: crate::util::ser::Writeable
 
+// There are quite a few TLV serialization "types" which behave differently. We currently only
+// publicly document the `optional` and `required` types, not supporting anything else publicly and
+// changing them at will.
+//
+// Some of the other types include:
+//  * (default_value, $default) - reads optionally, reading $default if no TLV is present
+//  * (static_value, $value) - ignores any TLVs, always using $value
+//  * required_vec - reads into a Vec without a length prefix, failing if no TLV is present.
+//  * optional_vec - reads into an Option<Vec> without a length prefix, continuing if no TLV is
+//                   present. Writes from a Vec directly, only if any elements are present. Note
+//                   that the struct deserialization macros return a Vec, not an Option.
+//  * upgradable_option - reads via MaybeReadable.
+//  * upgradable_required - reads via MaybeReadable, requiring a TLV be present but may return None
+//                          if MaybeReadable::read() returns None.
+
 /// Implements serialization for a single TLV record.
 /// This is exported for use by other exported macros, do not use directly.
 #[doc(hidden)]