@@ -28,7 +28,7 @@ use ln::msgs::{DecodeError, ErrorAction, Init, LightningError, RoutingMessageHan
28
28
use ln:: msgs:: { ChannelAnnouncement , ChannelUpdate , NodeAnnouncement , GossipTimestampFilter } ;
29
29
use ln:: msgs:: { QueryChannelRange , ReplyChannelRange , QueryShortChannelIds , ReplyShortChannelIdsEnd } ;
30
30
use ln:: msgs;
31
- use util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
31
+ use util:: ser:: { Readable , ReadableArgs , Writeable , Writer , MaybeReadable } ;
32
32
use util:: logger:: { Logger , Level } ;
33
33
use util:: events:: { Event , EventHandler , MessageSendEvent , MessageSendEventsProvider } ;
34
34
use util:: scid_utils:: { block_from_scid, scid_from_parts, MAX_SCID_BLOCK } ;
@@ -628,15 +628,77 @@ impl fmt::Display for ChannelUpdateInfo {
628
628
}
629
629
}
630
630
631
- impl_writeable_tlv_based ! ( ChannelUpdateInfo , {
632
- ( 0 , last_update, required) ,
633
- ( 2 , enabled, required) ,
634
- ( 4 , cltv_expiry_delta, required) ,
635
- ( 6 , htlc_minimum_msat, required) ,
636
- ( 8 , htlc_maximum_msat, required) ,
637
- ( 10 , fees, required) ,
638
- ( 12 , last_update_message, required) ,
639
- } ) ;
631
+ impl Writeable for ChannelUpdateInfo {
632
+ fn write < W : :: util:: ser:: Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
633
+ write_tlv_fields ! ( writer, {
634
+ ( 0 , self . last_update, required) ,
635
+ ( 2 , self . enabled, required) ,
636
+ ( 4 , self . cltv_expiry_delta, required) ,
637
+ ( 6 , self . htlc_minimum_msat, required) ,
638
+ ( 8 , self . htlc_maximum_msat, required) ,
639
+ ( 10 , self . fees, required) ,
640
+ ( 12 , self . last_update_message, required) ,
641
+ } ) ;
642
+ Ok ( ( ) )
643
+ }
644
+
645
+ #[ inline]
646
+ fn serialized_length ( & self ) -> usize {
647
+ use util:: ser:: BigSize ;
648
+ let len = {
649
+ #[ allow( unused_mut) ]
650
+ let mut len = :: util:: ser:: LengthCalculatingWriter ( 0 ) ;
651
+ get_varint_length_prefixed_tlv_length ! ( len, 0 , self . last_update, required) ;
652
+ get_varint_length_prefixed_tlv_length ! ( len, 2 , self . enabled, required) ;
653
+ get_varint_length_prefixed_tlv_length ! ( len, 4 , self . cltv_expiry_delta, required) ;
654
+ get_varint_length_prefixed_tlv_length ! ( len, 6 , self . htlc_minimum_msat, required) ;
655
+ get_varint_length_prefixed_tlv_length ! ( len, 8 , self . htlc_maximum_msat, required) ;
656
+ get_varint_length_prefixed_tlv_length ! ( len, 10 , self . fees, required) ;
657
+ get_varint_length_prefixed_tlv_length ! ( len, 12 , self . last_update_message, required) ;
658
+ len. 0
659
+ } ;
660
+ let mut len_calc = :: util:: ser:: LengthCalculatingWriter ( 0 ) ;
661
+ BigSize ( len as u64 ) . write ( & mut len_calc) . expect ( "No in-memory data may fail to serialize" ) ;
662
+ len + len_calc. 0
663
+ }
664
+
665
+ }
666
+
667
+ impl MaybeReadable for ChannelUpdateInfo {
668
+ fn read < R : io:: Read > ( reader : & mut R ) -> Result < Option < Self > , DecodeError > {
669
+ init_tlv_field_var ! ( last_update, required) ;
670
+ init_tlv_field_var ! ( enabled, required) ;
671
+ init_tlv_field_var ! ( cltv_expiry_delta, required) ;
672
+ init_tlv_field_var ! ( htlc_minimum_msat, required) ;
673
+ init_tlv_field_var ! ( htlc_maximum_msat, required) ;
674
+ init_tlv_field_var ! ( fees, required) ;
675
+ init_tlv_field_var ! ( last_update_message, required) ;
676
+
677
+ read_tlv_fields ! ( reader, {
678
+ ( 0 , last_update, required) ,
679
+ ( 2 , enabled, required) ,
680
+ ( 4 , cltv_expiry_delta, required) ,
681
+ ( 6 , htlc_minimum_msat, required) ,
682
+ ( 8 , htlc_maximum_msat, required) ,
683
+ ( 10 , fees, required) ,
684
+ ( 12 , last_update_message, required)
685
+ } ) ;
686
+
687
+ if let Some ( htlc_maximum_msat) = htlc_maximum_msat. 0 {
688
+ Ok ( Some ( ChannelUpdateInfo {
689
+ last_update : init_tlv_based_struct_field ! ( last_update, required) ,
690
+ enabled : init_tlv_based_struct_field ! ( enabled, required) ,
691
+ cltv_expiry_delta : init_tlv_based_struct_field ! ( cltv_expiry_delta, required) ,
692
+ htlc_minimum_msat : init_tlv_based_struct_field ! ( htlc_minimum_msat, required) ,
693
+ htlc_maximum_msat,
694
+ fees : init_tlv_based_struct_field ! ( fees, required) ,
695
+ last_update_message : init_tlv_based_struct_field ! ( last_update_message, required) ,
696
+ } ) )
697
+ } else {
698
+ Ok ( None )
699
+ }
700
+ }
701
+ }
640
702
641
703
#[ derive( Clone , Debug , PartialEq ) ]
642
704
/// Details about a channel (both directions).
@@ -715,16 +777,77 @@ impl fmt::Display for ChannelInfo {
715
777
}
716
778
}
717
779
718
- impl_writeable_tlv_based ! ( ChannelInfo , {
719
- ( 0 , features, required) ,
720
- ( 1 , announcement_received_time, ( default_value, 0 ) ) ,
721
- ( 2 , node_one, required) ,
722
- ( 4 , one_to_two, required) ,
723
- ( 6 , node_two, required) ,
724
- ( 8 , two_to_one, required) ,
725
- ( 10 , capacity_sats, required) ,
726
- ( 12 , announcement_message, required) ,
727
- } ) ;
780
+ impl Writeable for ChannelInfo {
781
+ fn write < W : :: util:: ser:: Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
782
+ write_tlv_fields ! ( writer, {
783
+ ( 0 , self . features, required) ,
784
+ ( 1 , self . announcement_received_time, ( default_value, 0 ) ) ,
785
+ ( 2 , self . node_one, required) ,
786
+ ( 4 , self . one_to_two, required) ,
787
+ ( 6 , self . node_two, required) ,
788
+ ( 8 , self . two_to_one, required) ,
789
+ ( 10 , self . capacity_sats, required) ,
790
+ ( 12 , self . announcement_message, required) ,
791
+ } ) ;
792
+ Ok ( ( ) )
793
+ }
794
+
795
+ #[ inline]
796
+ fn serialized_length ( & self ) -> usize {
797
+ use util:: ser:: BigSize ;
798
+ let len = {
799
+ #[ allow( unused_mut) ]
800
+ let mut len = :: util:: ser:: LengthCalculatingWriter ( 0 ) ;
801
+ get_varint_length_prefixed_tlv_length ! ( len, 0 , self . features, required) ;
802
+ get_varint_length_prefixed_tlv_length ! ( len, 1 , self . announcement_received_time, ( default_value, 0 ) ) ;
803
+ get_varint_length_prefixed_tlv_length ! ( len, 2 , self . node_one, required) ;
804
+ get_varint_length_prefixed_tlv_length ! ( len, 4 , self . one_to_two, required) ;
805
+ get_varint_length_prefixed_tlv_length ! ( len, 6 , self . node_two, required) ;
806
+ get_varint_length_prefixed_tlv_length ! ( len, 8 , self . two_to_one, required) ;
807
+ get_varint_length_prefixed_tlv_length ! ( len, 10 , self . capacity_sats, required) ;
808
+ get_varint_length_prefixed_tlv_length ! ( len, 12 , self . announcement_message, required) ;
809
+ len. 0
810
+ } ;
811
+ let mut len_calc = :: util:: ser:: LengthCalculatingWriter ( 0 ) ;
812
+ BigSize ( len as u64 ) . write ( & mut len_calc) . expect ( "No in-memory data may fail to serialize" ) ;
813
+ len + len_calc. 0
814
+ }
815
+
816
+ }
817
+
818
+ impl Readable for ChannelInfo {
819
+ fn read < R : io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
820
+ init_tlv_field_var ! ( features, required) ;
821
+ init_tlv_field_var ! ( announcement_received_time, ( default_value, 0 ) ) ;
822
+ init_tlv_field_var ! ( node_one, required) ;
823
+ let mut one_to_two = None ;
824
+ init_tlv_field_var ! ( node_two, required) ;
825
+ let mut two_to_one = None ;
826
+ init_tlv_field_var ! ( capacity_sats, required) ;
827
+ init_tlv_field_var ! ( announcement_message, required) ;
828
+ read_tlv_fields ! ( reader, {
829
+ ( 0 , features, required) ,
830
+ ( 1 , announcement_received_time, ( default_value, 0 ) ) ,
831
+ ( 2 , node_one, required) ,
832
+ ( 4 , one_to_two, ignorable) ,
833
+ ( 6 , node_two, required) ,
834
+ ( 8 , two_to_one, ignorable) ,
835
+ ( 10 , capacity_sats, required) ,
836
+ ( 12 , announcement_message, required) ,
837
+ } ) ;
838
+
839
+ Ok ( ChannelInfo {
840
+ features : init_tlv_based_struct_field ! ( features, required) ,
841
+ node_one : init_tlv_based_struct_field ! ( node_one, required) ,
842
+ one_to_two,
843
+ node_two : init_tlv_based_struct_field ! ( node_two, required) ,
844
+ two_to_one,
845
+ capacity_sats : init_tlv_based_struct_field ! ( capacity_sats, required) ,
846
+ announcement_message : init_tlv_based_struct_field ! ( announcement_message, required) ,
847
+ announcement_received_time : init_tlv_based_struct_field ! ( announcement_received_time, ( default_value, 0 ) ) ,
848
+ } )
849
+ }
850
+ }
728
851
729
852
/// A wrapper around [`ChannelInfo`] representing information about the channel as directed from a
730
853
/// source node to a target node.
0 commit comments