@@ -205,28 +205,28 @@ impl_encode_for_tuples! {
205205
206206impl < T : Encode > Encode for Option < T > {
207207 fn is_ssz_fixed_len ( ) -> bool {
208- false
208+ T :: is_ssz_fixed_len ( )
209+ }
210+
211+ fn ssz_fixed_len ( ) -> usize {
212+ T :: ssz_fixed_len ( )
209213 }
214+
210215 fn ssz_append ( & self , buf : & mut Vec < u8 > ) {
211- match self {
212- Option :: None => {
213- let union_selector: u8 = 0u8 ;
214- buf. push ( union_selector) ;
215- }
216- Option :: Some ( ref inner) => {
217- let union_selector: u8 = 1u8 ;
218- buf. push ( union_selector) ;
219- inner. ssz_append ( buf) ;
216+ match & self {
217+ None => { }
218+ Some ( _) => {
219+ if let Some ( inner) = self . as_ref ( ) {
220+ inner. ssz_append ( buf) ;
221+ }
220222 }
221223 }
222224 }
225+
223226 fn ssz_bytes_len ( & self ) -> usize {
224- match self {
225- Option :: None => 1usize ,
226- Option :: Some ( ref inner) => inner
227- . ssz_bytes_len ( )
228- . checked_add ( 1 )
229- . expect ( "encoded length must be less than usize::max_value" ) ,
227+ match & self {
228+ None => 0 ,
229+ Some ( inner) => inner. ssz_bytes_len ( ) ,
230230 }
231231 }
232232}
@@ -594,9 +594,9 @@ mod tests {
594594 #[ test]
595595 fn ssz_encode_option_u8 ( ) {
596596 let opt: Option < u8 > = None ;
597- assert_eq ! ( opt. as_ssz_bytes( ) , vec![ 0 ] ) ;
597+ assert_eq ! ( opt. as_ssz_bytes( ) , vec![ ] ) ;
598598 let opt: Option < u8 > = Some ( 2 ) ;
599- assert_eq ! ( opt. as_ssz_bytes( ) , vec![ 1 , 2 ] ) ;
599+ assert_eq ! ( opt. as_ssz_bytes( ) , vec![ 2 ] ) ;
600600 }
601601
602602 #[ test]
0 commit comments