@@ -643,79 +643,50 @@ impl Writeable for ChannelUpdateInfo {
643
643
}
644
644
}
645
645
646
- impl MaybeReadable for ChannelUpdateInfo {
647
- fn read < R : io:: Read > ( reader : & mut R ) -> Result < Option < Self > , DecodeError > {
648
- macro_rules! read_channel_update_tlv_fields {
649
- ( $reader: expr, { $( ( $type: expr, $field: ident) ) ,* $( , ) * } ) => { {
650
- let mut stream_ref = $reader;
651
- $( {
652
- if stream_ref. bytes_remain( ) {
653
- let tlv_type_res: Result <:: util:: ser:: BigSize , DecodeError > = :: util:: ser:: Readable :: read( stream_ref) ;
654
- $field = if let Ok ( ref tlv_type) = tlv_type_res {
655
- println!( "GOT TYPE: {}" , tlv_type. 0 ) ;
656
- assert_eq!( tlv_type. 0 , $type) ;
657
-
658
- let tlv_len_res: Result <:: util:: ser:: BigSize , DecodeError > = :: util:: ser:: Readable :: read( & mut stream_ref) ;
659
- if let Ok ( ref tlv_len) = tlv_len_res {
660
- println!( "GOT LEN: {}" , tlv_len. 0 ) ;
661
- let mut s = :: util:: ser:: FixedLengthReader :: new( & mut stream_ref, tlv_len. 0 ) ;
662
- let tlv_value_res = :: util:: ser:: Readable :: read( & mut s) ;
663
- let _ = s. eat_remaining( ) ;
664
- tlv_value_res. ok( )
665
- } else {
666
- None
667
- }
668
- } else {
669
- None
670
- } ;
671
- }
672
- } ) *
673
- } } ;
674
- }
646
+ struct ChannelUpdateInfoDeserWrap ( ChannelUpdateInfo ) ;
675
647
676
- let outer_tlv_len: :: util:: ser:: BigSize = :: util:: ser:: Readable :: read ( reader) ?;
677
- if outer_tlv_len. 0 == 0 {
678
- return Ok ( None ) ;
648
+ impl MaybeReadable for ChannelUpdateInfoDeserWrap {
649
+ fn read < R : io:: Read > ( reader : & mut R ) -> Result < Option < Self > , DecodeError > {
650
+ if let Ok ( channel_update) = :: util:: ser:: Readable :: read ( reader) {
651
+ Ok ( Some ( Self ( channel_update) ) )
652
+ } else {
653
+ Ok ( None )
679
654
}
680
- let mut outer_fixed_reader = :: util :: ser :: FixedLengthReader :: new ( reader , outer_tlv_len . 0 ) ;
681
-
655
+ }
656
+ }
682
657
683
- let mut last_update: Option < u32 > = None ;
684
- let mut enabled: Option < bool > = None ;
685
- let mut cltv_expiry_delta: Option < u16 > = None ;
686
- let mut htlc_minimum_msat: Option < u64 > = None ;
687
- let mut htlc_maximum_msat: Option < Option < u64 > > = None ;
688
- let mut fees: Option < RoutingFees > = None ;
689
- let mut last_update_message: Option < Option < ChannelUpdate > > = None ;
658
+ impl Readable for ChannelUpdateInfo {
659
+ fn read < R : io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
660
+ init_tlv_field_var ! ( last_update, required) ;
661
+ init_tlv_field_var ! ( enabled, required) ;
662
+ init_tlv_field_var ! ( cltv_expiry_delta, required) ;
663
+ init_tlv_field_var ! ( htlc_minimum_msat, required) ;
664
+ init_tlv_field_var ! ( htlc_maximum_msat, option) ;
665
+ init_tlv_field_var ! ( fees, required) ;
666
+ init_tlv_field_var ! ( last_update_message, required) ;
690
667
691
- read_channel_update_tlv_fields ! ( & mut outer_fixed_reader , {
692
- ( 0 , last_update) ,
693
- ( 2 , enabled) ,
694
- ( 4 , cltv_expiry_delta) ,
695
- ( 6 , htlc_minimum_msat) ,
696
- ( 8 , htlc_maximum_msat) ,
697
- ( 10 , fees) ,
698
- ( 12 , last_update_message) ,
668
+ read_tlv_fields ! ( reader , {
669
+ ( 0 , last_update, required ) ,
670
+ ( 2 , enabled, required ) ,
671
+ ( 4 , cltv_expiry_delta, required ) ,
672
+ ( 6 , htlc_minimum_msat, required ) ,
673
+ ( 8 , htlc_maximum_msat, required ) ,
674
+ ( 10 , fees, required ) ,
675
+ ( 12 , last_update_message, required )
699
676
} ) ;
700
- let decoding_success = last_update. is_some ( ) && enabled. is_some ( ) &&
701
- cltv_expiry_delta. is_some ( ) && htlc_minimum_msat. is_some ( ) &&
702
- htlc_maximum_msat. is_some ( ) && fees. is_some ( ) &&
703
- last_update_message. is_some ( ) ;
704
-
705
- outer_fixed_reader. eat_remaining ( ) ?;
706
- if decoding_success {
707
- println ! ( "DECODING SUCCESS" ) ;
708
- Ok ( Some ( ChannelUpdateInfo {
709
- last_update : last_update. unwrap ( ) ,
710
- enabled : enabled. unwrap ( ) ,
711
- cltv_expiry_delta : cltv_expiry_delta. unwrap ( ) ,
712
- htlc_minimum_msat : htlc_minimum_msat. unwrap ( ) ,
713
- htlc_maximum_msat : htlc_maximum_msat. unwrap ( ) . unwrap ( ) ,
714
- fees : fees. unwrap ( ) ,
715
- last_update_message : last_update_message. unwrap ( ) ,
716
- } ) )
677
+
678
+ if let Some ( htlc_maximum_msat) = htlc_maximum_msat {
679
+ Ok ( ChannelUpdateInfo {
680
+ last_update : init_tlv_based_struct_field ! ( last_update, required) ,
681
+ enabled : init_tlv_based_struct_field ! ( enabled, required) ,
682
+ cltv_expiry_delta : init_tlv_based_struct_field ! ( cltv_expiry_delta, required) ,
683
+ htlc_minimum_msat : init_tlv_based_struct_field ! ( htlc_minimum_msat, required) ,
684
+ htlc_maximum_msat,
685
+ fees : init_tlv_based_struct_field ! ( fees, required) ,
686
+ last_update_message : init_tlv_based_struct_field ! ( last_update_message, required) ,
687
+ } )
717
688
} else {
718
- Ok ( None )
689
+ Err ( DecodeError :: InvalidValue )
719
690
}
720
691
}
721
692
}
@@ -818,28 +789,28 @@ impl Readable for ChannelInfo {
818
789
init_tlv_field_var ! ( features, required) ;
819
790
init_tlv_field_var ! ( announcement_received_time, ( default_value, 0 ) ) ;
820
791
init_tlv_field_var ! ( node_one, required) ;
821
- let mut one_to_two = None ;
792
+ let mut one_to_two_wrap : Option < ChannelUpdateInfoDeserWrap > = None ;
822
793
init_tlv_field_var ! ( node_two, required) ;
823
- let mut two_to_one = None ;
794
+ let mut two_to_one_wrap : Option < ChannelUpdateInfoDeserWrap > = None ;
824
795
init_tlv_field_var ! ( capacity_sats, required) ;
825
796
init_tlv_field_var ! ( announcement_message, required) ;
826
797
read_tlv_fields ! ( reader, {
827
798
( 0 , features, required) ,
828
799
( 1 , announcement_received_time, ( default_value, 0 ) ) ,
829
800
( 2 , node_one, required) ,
830
- ( 4 , one_to_two , ignorable) ,
801
+ ( 4 , one_to_two_wrap , ignorable) ,
831
802
( 6 , node_two, required) ,
832
- ( 8 , two_to_one , ignorable) ,
803
+ ( 8 , two_to_one_wrap , ignorable) ,
833
804
( 10 , capacity_sats, required) ,
834
805
( 12 , announcement_message, required) ,
835
806
} ) ;
836
807
837
808
Ok ( ChannelInfo {
838
809
features : init_tlv_based_struct_field ! ( features, required) ,
839
810
node_one : init_tlv_based_struct_field ! ( node_one, required) ,
840
- one_to_two,
811
+ one_to_two : one_to_two_wrap . map ( |w| w . 0 ) ,
841
812
node_two : init_tlv_based_struct_field ! ( node_two, required) ,
842
- two_to_one,
813
+ two_to_one : two_to_one_wrap . map ( |w| w . 0 ) ,
843
814
capacity_sats : init_tlv_based_struct_field ! ( capacity_sats, required) ,
844
815
announcement_message : init_tlv_based_struct_field ! ( announcement_message, required) ,
845
816
announcement_received_time : init_tlv_based_struct_field ! ( announcement_received_time, ( default_value, 0 ) ) ,
0 commit comments