@@ -3,50 +3,20 @@ use crate::{
33 crypto:: { Manifest , ManifestSigner } ,
44 DataBlock , DataHash , DataSeek , DataUpgrade , Node , RequestBlock , RequestSeek , RequestUpgrade ,
55} ;
6- use compact_encoding:: encoded_size_usize;
6+ use compact_encoding:: { as_array , encoded_size_usize, map_encode , sum_encoded_size } ;
77pub use compact_encoding:: {
88 bytes_fixed_from_vec, encode_bytes_fixed, take_array, take_array_mut, write_array, write_slice,
99 CompactEncoding , EncodingError , EncodingErrorKind , VecEncodable ,
1010} ;
1111
12- #[ macro_export]
13- /// Used for defining CompactEncoding::encoded_size.
14- /// Pass self and a list of fields to call encoded_size on
15- macro_rules! sum_encoded_size {
16- // Base case: single field
17- ( $self: ident, $field: ident) => {
18- $self. $field. encoded_size( ) ?
19- } ;
20- // Recursive case: first field + rest
21- ( $self: ident, $first: ident, $( $rest: ident) ,+) => {
22- $self. $first. encoded_size( ) ? + sum_encoded_size!( $self, $( $rest) ,+)
23- } ;
24- }
25-
26- #[ macro_export]
27- // TODO is this exported from the crate?
28- /// Used for defining CompactEncoding::encode.
29- /// Pass self, the buffer and a list of fields to call encoded_size on
30- macro_rules! chain_encoded_bytes {
31- // Base case: single field
32- ( $self: ident, $buffer: ident, $field: ident) => {
33- $self. $field. encode( $buffer) ?
34- } ;
35- // Recursive case: first field + rest
36- ( $self: ident, $buffer: ident, $first: ident, $( $rest: ident) ,+) => { {
37- let rest = $self. $first. encode( $buffer) ?;
38- chain_encoded_bytes!( $self, rest, $( $rest) ,+)
39- } } ;
40- }
41-
4212impl CompactEncoding for Node {
4313 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
44- Ok ( sum_encoded_size ! ( self , index, length) + 32 )
14+ Ok ( sum_encoded_size ! ( self . index, self . length) + 32 )
4515 }
4616
4717 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
48- let rest = chain_encoded_bytes ! ( self , buffer , index , length ) ;
49- bytes_fixed_from_vec :: < 32 > ( & self . hash ) ? . encode ( rest )
18+ let hash = as_array :: < 32 > ( & self . hash ) ? ;
19+ Ok ( map_encode ! ( buffer , self . index , self . length , hash) )
5020 }
5121
5222 fn decode ( buffer : & [ u8 ] ) -> Result < ( Self , & [ u8 ] ) , EncodingError >
@@ -56,6 +26,7 @@ impl CompactEncoding for Node {
5626 let ( index, rest) = u64:: decode ( buffer) ?;
5727 let ( length, rest) = u64:: decode ( rest) ?;
5828 let ( hash, rest) = <[ u8 ; 32 ] >:: decode ( rest) ?;
29+
5930 Ok ( ( Node :: new ( index, hash. to_vec ( ) , length) , rest) )
6031 }
6132}
@@ -75,11 +46,11 @@ impl VecEncodable for Node {
7546
7647impl CompactEncoding for RequestBlock {
7748 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
78- Ok ( sum_encoded_size ! ( self , index, nodes) )
49+ Ok ( sum_encoded_size ! ( self . index, self . nodes) )
7950 }
8051
8152 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
82- Ok ( chain_encoded_bytes ! ( self , buffer, index, nodes) )
53+ Ok ( map_encode ! ( buffer, self . index, self . nodes) )
8354 }
8455
8556 fn decode ( buffer : & [ u8 ] ) -> Result < ( Self , & [ u8 ] ) , EncodingError >
@@ -112,11 +83,11 @@ impl CompactEncoding for RequestSeek {
11283
11384impl CompactEncoding for RequestUpgrade {
11485 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
115- Ok ( sum_encoded_size ! ( self , start, length) )
86+ Ok ( sum_encoded_size ! ( self . start, self . length) )
11687 }
11788
11889 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
119- Ok ( chain_encoded_bytes ! ( self , buffer, start, length) )
90+ Ok ( map_encode ! ( buffer, self . start, self . length) )
12091 }
12192
12293 fn decode ( buffer : & [ u8 ] ) -> Result < ( Self , & [ u8 ] ) , EncodingError >
@@ -131,11 +102,11 @@ impl CompactEncoding for RequestUpgrade {
131102
132103impl CompactEncoding for DataBlock {
133104 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
134- Ok ( sum_encoded_size ! ( self , index, value, nodes) )
105+ Ok ( sum_encoded_size ! ( self . index, self . value, self . nodes) )
135106 }
136107
137108 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
138- Ok ( chain_encoded_bytes ! ( self , buffer, index, value, nodes) )
109+ Ok ( map_encode ! ( buffer, self . index, self . value, self . nodes) )
139110 }
140111
141112 fn decode ( buffer : & [ u8 ] ) -> Result < ( Self , & [ u8 ] ) , EncodingError >
@@ -158,11 +129,11 @@ impl CompactEncoding for DataBlock {
158129
159130impl CompactEncoding for DataHash {
160131 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
161- Ok ( sum_encoded_size ! ( self , index, nodes) )
132+ Ok ( sum_encoded_size ! ( self . index, self . nodes) )
162133 }
163134
164135 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
165- Ok ( chain_encoded_bytes ! ( self , buffer, index, nodes) )
136+ Ok ( map_encode ! ( buffer, self . index, self . nodes) )
166137 }
167138
168139 fn decode ( buffer : & [ u8 ] ) -> Result < ( Self , & [ u8 ] ) , EncodingError >
@@ -177,11 +148,11 @@ impl CompactEncoding for DataHash {
177148
178149impl CompactEncoding for DataSeek {
179150 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
180- Ok ( sum_encoded_size ! ( self , bytes, nodes) )
151+ Ok ( sum_encoded_size ! ( self . bytes, self . nodes) )
181152 }
182153
183154 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
184- Ok ( chain_encoded_bytes ! ( self , buffer, bytes, nodes) )
155+ Ok ( map_encode ! ( buffer, self . bytes, self . nodes) )
185156 }
186157
187158 fn decode ( buffer : & [ u8 ] ) -> Result < ( Self , & [ u8 ] ) , EncodingError >
@@ -197,24 +168,22 @@ impl CompactEncoding for DataSeek {
197168impl CompactEncoding for DataUpgrade {
198169 fn encoded_size ( & self ) -> Result < usize , EncodingError > {
199170 Ok ( sum_encoded_size ! (
200- self ,
201- start,
202- length,
203- nodes,
204- additional_nodes,
205- signature
171+ self . start,
172+ self . length,
173+ self . nodes,
174+ self . additional_nodes,
175+ self . signature
206176 ) )
207177 }
208178
209179 fn encode < ' a > ( & self , buffer : & ' a mut [ u8 ] ) -> Result < & ' a mut [ u8 ] , EncodingError > {
210- Ok ( chain_encoded_bytes ! (
211- self ,
180+ Ok ( map_encode ! (
212181 buffer,
213- start,
214- length,
215- nodes,
216- additional_nodes,
217- signature
182+ self . start,
183+ self . length,
184+ self . nodes,
185+ self . additional_nodes,
186+ self . signature
218187 ) )
219188 }
220189
0 commit comments