@@ -115,7 +115,7 @@ macro_rules! check_tlv_order {
115
115
( $last_seen_type: expr, $typ: expr, $type: expr, $field: ident, vec_type) => { {
116
116
// no-op
117
117
} } ;
118
- ( $last_seen_type: expr, $typ: expr, $type: expr, $field: ident, maybe_readable ) => { {
118
+ ( $last_seen_type: expr, $typ: expr, $type: expr, $field: ident, ignorable ) => { {
119
119
// no-op
120
120
} } ;
121
121
}
@@ -141,7 +141,7 @@ macro_rules! check_missing_tlv {
141
141
( $last_seen_type: expr, $type: expr, $field: ident, option) => { {
142
142
// no-op
143
143
} } ;
144
- ( $last_seen_type: expr, $type: expr, $field: ident, maybe_readable ) => { {
144
+ ( $last_seen_type: expr, $type: expr, $field: ident, ignorable ) => { {
145
145
// no-op
146
146
} } ;
147
147
}
@@ -159,7 +159,7 @@ macro_rules! decode_tlv {
159
159
( $reader: expr, $field: ident, option) => { {
160
160
$field = Some ( ser:: Readable :: read( & mut $reader) ?) ;
161
161
} } ;
162
- ( $reader: expr, $field: ident, maybe_readable ) => { {
162
+ ( $reader: expr, $field: ident, ignorable ) => { {
163
163
$field = ser:: MaybeReadable :: read( & mut $reader) ?;
164
164
} } ;
165
165
}
@@ -496,6 +496,11 @@ macro_rules! _impl_writeable_tlv_based_enum_common {
496
496
497
497
/// Implement MaybeReadable and Writeable for an enum, with struct variants stored as TLVs and
498
498
/// tuple variants stored directly.
499
+ ///
500
+ /// This is largely identical to `impl_writeable_tlv_based_enum`, except that odd variants will
501
+ /// return `Ok(None)` instead of `Err(UnknownRequiredFeature)`. It should generally be preferred
502
+ /// when `MaybeReadable` is practical instead of just `Readable` as it provides an upgrade path for
503
+ /// new variants to be added which are simply ignored by existing clients.
499
504
macro_rules! impl_writeable_tlv_based_enum_upgradable {
500
505
( $st: ident, $( ( $variant_id: expr, $variant_name: ident) =>
501
506
{ $( ( $type: expr, $field: ident, $fieldty: tt) ) ,* $( , ) * }
@@ -526,7 +531,7 @@ macro_rules! impl_writeable_tlv_based_enum_upgradable {
526
531
f( )
527
532
} ) ,*
528
533
_ if id % 2 == 1 => { Ok ( None ) }
529
- _ => { Err ( DecodeError :: UnknownRequiredFeature ) ? } ,
534
+ _ => { return Err ( DecodeError :: UnknownRequiredFeature ) ; } ,
530
535
}
531
536
}
532
537
}
0 commit comments