@@ -10,9 +10,7 @@ use crate::toxcore::stats::*;
1010use bytes:: BytesMut ;
1111use cookie_factory:: GenError ;
1212use failure:: Fail ;
13- use nom:: { error:: ErrorKind , Err ,
14- Needed
15- } ;
13+ use nom:: { error:: ErrorKind , Err } ;
1614use tokio:: codec:: { Decoder , Encoder } ;
1715
1816/// A serialized `Packet` should be not longer than 2048 bytes.
@@ -23,27 +21,19 @@ error_kind! {
2321 #[ derive( Debug ) ]
2422 DecodeError ,
2523 #[ doc = "Error that can happen when decoding `Packet` from bytes." ]
26- #[ derive( Clone , Debug , Eq , PartialEq , Fail ) ]
24+ #[ derive( Clone , Debug , PartialEq , Fail ) ]
2725 DecodeErrorKind {
2826 #[ doc = "Error indicates that we received too big packet." ]
2927 #[ fail( display = "Packet should not be longer than 2048 bytes: {} bytes" , len) ]
3028 TooBigPacket {
3129 #[ doc = "Length of received packet." ]
3230 len: usize
3331 } ,
34- #[ doc = "Error indicates that more data is needed to parse received packet." ]
35- #[ fail( display = "Packet should not be incomplete: {:?}, packet: {:?}" , needed, packet) ]
36- IncompletePacket {
37- #[ doc = "Required data size to be parsed." ]
38- needed: Needed ,
39- #[ doc = "Received packet." ]
40- packet: Vec <u8 >,
41- } ,
4232 #[ doc = "Error indicates that received packet can't be parsed." ]
4333 #[ fail( display = "Deserialize Packet error: {:?}, packet: {:?}" , error, packet) ]
4434 Deserialize {
4535 #[ doc = "Parsing error." ]
46- error: ErrorKind ,
36+ error: nom :: Err < ( Vec < u8 > , ErrorKind ) > ,
4737 #[ doc = "Received packet." ]
4838 packet: Vec <u8 >,
4939 } ,
@@ -58,11 +48,13 @@ impl DecodeError {
5848 DecodeError :: from ( DecodeErrorKind :: TooBigPacket { len } )
5949 }
6050
61- pub ( crate ) fn incomplete_packet ( needed : Needed , packet : Vec < u8 > ) -> DecodeError {
62- DecodeError :: from ( DecodeErrorKind :: IncompletePacket { needed, packet } )
63- }
51+ pub ( crate ) fn deserialize ( e : Err < ( & [ u8 ] , ErrorKind ) > , packet : Vec < u8 > ) -> DecodeError {
52+ let error = match e {
53+ Err :: Error ( e) => Err :: Error ( ( e. 0 . to_vec ( ) , e. 1 ) ) ,
54+ Err :: Failure ( e) => Err :: Failure ( ( e. 0 . to_vec ( ) , e. 1 ) ) ,
55+ Err :: Incomplete ( needed) => Err :: Incomplete ( needed) ,
56+ } ;
6457
65- pub ( crate ) fn deserialize ( error : ErrorKind , packet : Vec < u8 > ) -> DecodeError {
6658 DecodeError :: from ( DecodeErrorKind :: Deserialize { error, packet } )
6759 }
6860}
@@ -134,14 +126,8 @@ impl Decoder for DhtCodec {
134126 }
135127
136128 match Packet :: from_bytes ( buf) {
137- Err ( Err :: Incomplete ( needed) ) => Err ( DecodeError :: incomplete_packet ( needed, buf. to_vec ( ) ) ) ,
138- Err ( Err :: Error ( error) ) => {
139- let ( _, kind) = error;
140- Err ( DecodeError :: deserialize ( kind, buf. to_vec ( ) ) )
141- } ,
142- Err ( Err :: Failure ( error) ) => {
143- let ( _, kind) = error;
144- Err ( DecodeError :: deserialize ( kind, buf. to_vec ( ) ) )
129+ Err ( error) => {
130+ Err ( DecodeError :: deserialize ( error, buf. to_vec ( ) ) )
145131 } ,
146132 Ok ( ( _, packet) ) => {
147133 // Add 1 to incoming counter
@@ -175,6 +161,7 @@ impl Encoder for DhtCodec {
175161#[ cfg( test) ]
176162mod tests {
177163 use super :: * ;
164+ use nom:: Needed ;
178165 use crate :: toxcore:: onion:: packet:: * ;
179166 use crate :: toxcore:: crypto_core:: * ;
180167
@@ -356,8 +343,8 @@ mod tests {
356343
357344 let res = codec. decode ( & mut buf) ;
358345 // not enought bytes to decode EncryptedPacket
359- assert ! ( res. is_err ( ) ) ;
360- assert_eq ! ( * res . err ( ) . unwrap ( ) . kind( ) , DecodeErrorKind :: Deserialize { error: ErrorKind :: Alt , packet: vec![ 0xff ] } ) ;
346+ let error = res. err ( ) . unwrap ( ) ;
347+ assert_eq ! ( * error . kind( ) , DecodeErrorKind :: Deserialize { error: Err :: Error ( ( vec! [ 255 ] , ErrorKind :: Alt ) ) , packet: vec![ 0xff ] } ) ;
361348 }
362349
363350 #[ test]
@@ -369,8 +356,8 @@ mod tests {
369356
370357 // not enought bytes to decode EncryptedPacket
371358 let res = codec. decode ( & mut buf) ;
372- assert ! ( res. is_err ( ) ) ;
373- assert_eq ! ( * res . err ( ) . unwrap ( ) . kind( ) , DecodeErrorKind :: IncompletePacket { needed : Needed :: Size ( 1 ) , packet: Vec :: new( ) } ) ;
359+ let error = res. err ( ) . unwrap ( ) ;
360+ assert_eq ! ( * error . kind( ) , DecodeErrorKind :: Deserialize { error : Err :: Incomplete ( Needed :: Size ( 1 ) ) , packet: Vec :: new( ) } ) ;
374361 }
375362
376363 #[ test]
0 commit comments