1- use compact_encoding:: { decode_usize, take_array, write_array, CompactEncoding , EncodingError } ;
1+ use compact_encoding:: {
2+ decode_usize, map_decode, take_array, write_array, CompactEncoding , EncodingError ,
3+ } ;
24use compact_encoding:: { map_encode, sum_encoded_size} ;
35use ed25519_dalek:: { SigningKey , PUBLIC_KEY_LENGTH , SECRET_KEY_LENGTH } ;
46
@@ -80,35 +82,6 @@ impl HeaderTree {
8082 }
8183}
8284
83- #[ macro_export]
84- /// Helper for decoding a struct with compact encodable
85- macro_rules! decode {
86- // Match the pattern: decode!(StructName, buffer, {field1: type1, field2: type2, ...})
87- ( $struct_name: ident, $buffer: expr, {
88- $( $field_name: ident : $field_type: ty) ,* $( , ) ?
89- } ) => { {
90-
91- // Variable to hold the current buffer state
92- let mut current_buffer = $buffer;
93-
94- // Decode each field in sequence
95- $(
96- let ( $field_name, new_buffer) = <$field_type>:: decode( current_buffer) ?;
97- current_buffer = new_buffer;
98- ) *
99-
100- // Create the struct with decoded fields
101- let result = $struct_name {
102- $(
103- $field_name,
104- ) *
105- } ;
106-
107- // Return the struct and the remaining buffer
108- Ok ( ( result, current_buffer) )
109- } } ;
110- }
111-
11285impl CompactEncoding for HeaderTree {
11386 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
11487 Ok ( sum_encoded_size ! (
@@ -133,7 +106,17 @@ impl CompactEncoding for HeaderTree {
133106 where
134107 Self : Sized ,
135108 {
136- decode ! ( HeaderTree , buffer, { fork: u64 , length: u64 , root_hash: Box <[ u8 ] >, signature: Box <[ u8 ] >} )
109+ let ( ( fork, length, root_hash, signature) , rest) =
110+ map_decode ! ( buffer, [ u64 , u64 , Box <[ u8 ] >, Box <[ u8 ] >] ) ;
111+ Ok ( (
112+ Self {
113+ fork,
114+ length,
115+ root_hash,
116+ signature,
117+ } ,
118+ rest,
119+ ) )
137120 }
138121}
139122
@@ -224,7 +207,14 @@ impl CompactEncoding for HeaderHints {
224207 where
225208 Self : Sized ,
226209 {
227- decode ! ( HeaderHints , buffer, { reorgs: Vec <String >, contiguous_length: u64 } )
210+ let ( ( reorgs, contiguous_length) , rest) = map_decode ! ( buffer, [ Vec <String >, u64 ] ) ;
211+ Ok ( (
212+ Self {
213+ reorgs,
214+ contiguous_length,
215+ } ,
216+ rest,
217+ ) )
228218 }
229219}
230220
0 commit comments