Skip to content

Commit cae165b

Browse files
committed
feat(nom5): unify matching errors
1 parent ad501d2 commit cae165b

20 files changed

+128
-284
lines changed

examples/echo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ fn main() {
140140
},
141141
PACKET_ID_SHARE_RELAYS => {
142142
match ShareRelays::from_bytes(&packet) {
143-
IResult::Done(_, share_relays) =>
143+
Ok((_, share_relays)) =>
144144
Box::new(friend_connections_c.handle_share_relays(pk, share_relays)
145145
.map_err(Error::from))
146146
as Box<Future<Item = _, Error = _> + Send>,

src/toxcore/dht/packet/cookie.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
/*! Cookie struct
22
*/
33

4-
use nom::{Needed, Err,
5-
number::complete::be_u64,
6-
};
4+
use nom::number::complete::be_u64;
75

86
use std::time::SystemTime;
97

@@ -154,17 +152,9 @@ impl EncryptedCookie {
154152
GetPayloadError::decrypt()
155153
})?;
156154
match Cookie::from_bytes(&decrypted) {
157-
Err(Err::Incomplete(Needed::Unknown)) => {
158-
Err(GetPayloadError::incomplete(Needed::Unknown, self.payload.to_vec()))
155+
Err(error) => {
156+
Err(GetPayloadError::deserialize(error, decrypted.clone()))
159157
},
160-
Err(Err::Incomplete(needed)) => {
161-
Err(GetPayloadError::incomplete(needed, self.payload.to_vec()))
162-
},
163-
Err(Err::Error(error)) => {
164-
let (_, kind) = error;
165-
Err(GetPayloadError::deserialize(kind, self.payload.to_vec()))
166-
},
167-
Err(Err::Failure(e)) => panic!("Cookie deserialize failed with unrecoverable error: {:?}", e),
168158
Ok((_, payload)) => {
169159
Ok(payload)
170160
}
@@ -181,7 +171,9 @@ impl EncryptedCookie {
181171
#[cfg(test)]
182172
mod tests {
183173
use super::*;
184-
use nom::error::ErrorKind;
174+
use nom::{Err,
175+
error::ErrorKind
176+
};
185177

186178
encode_decode_test!(
187179
cookie_encode_decode,
@@ -240,8 +232,11 @@ mod tests {
240232
payload: invalid_payload_encoded
241233
};
242234
let decoded_payload = invalid_encrypted_cookie.get_payload(&symmetric_key);
243-
assert!(decoded_payload.is_err());
244-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Deserialize { error: ErrorKind::Eof, payload: invalid_encrypted_cookie.payload });
235+
let error = decoded_payload.err().unwrap();
236+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize {
237+
error: Err::Error(("***************************************************".to_owned(), ErrorKind::Eof)),
238+
payload: invalid_payload.to_vec()
239+
});
245240
// Try short incomplete array
246241
let invalid_payload = [42, 42];
247242
let invalid_payload_encoded = secretbox::seal(&invalid_payload, &nonce, &symmetric_key);
@@ -250,8 +245,11 @@ mod tests {
250245
payload: invalid_payload_encoded
251246
};
252247
let decoded_payload = invalid_encrypted_cookie.get_payload(&symmetric_key);
253-
assert!(decoded_payload.is_err());
254-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Deserialize { error: ErrorKind::Eof, payload: invalid_encrypted_cookie.payload });
248+
let error = decoded_payload.err().unwrap();
249+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize {
250+
error: Err::Error(("**".to_owned(), ErrorKind::Eof)),
251+
payload: invalid_payload.to_vec()
252+
});
255253
}
256254

257255
#[test]

src/toxcore/dht/packet/cookie_request.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
/*! CookieRequest packet
22
*/
33

4-
use nom::{Needed, Err,
5-
number::complete::be_u64,
6-
};
4+
use nom::number::complete::be_u64;
75

86
use crate::toxcore::binary_io::*;
97
use crate::toxcore::crypto_core::*;
@@ -94,17 +92,9 @@ impl CookieRequest {
9492
GetPayloadError::decrypt()
9593
})?;
9694
match CookieRequestPayload::from_bytes(&decrypted) {
97-
Err(Err::Incomplete(Needed::Unknown)) => {
98-
Err(GetPayloadError::incomplete(Needed::Unknown, self.payload.to_vec()))
95+
Err(error) => {
96+
Err(GetPayloadError::deserialize(error, decrypted.clone()))
9997
},
100-
Err(Err::Incomplete(needed)) => {
101-
Err(GetPayloadError::incomplete(needed, self.payload.to_vec()))
102-
},
103-
Err(Err::Error(error)) => {
104-
let (_, kind) = error;
105-
Err(GetPayloadError::deserialize(kind, self.payload.to_vec()))
106-
},
107-
Err(Err::Failure(e)) => panic!("CookieRequestPayload deserialize failed with unrecoverable error: {:?}", e),
10898
Ok((_, payload)) => {
10999
Ok(payload)
110100
}

src/toxcore/dht/packet/cookie_response.rs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
/*! CookieResponse packet
22
*/
33

4-
use nom::{Needed, Err,
5-
number::complete::be_u64,
6-
};
4+
use nom::number::complete::be_u64;
75

86
use crate::toxcore::binary_io::*;
97
use crate::toxcore::crypto_core::*;
@@ -79,17 +77,9 @@ impl CookieResponse {
7977
GetPayloadError::decrypt()
8078
})?;
8179
match CookieResponsePayload::from_bytes(&decrypted) {
82-
Err(Err::Incomplete(Needed::Unknown)) => {
83-
Err(GetPayloadError::incomplete(Needed::Unknown, self.payload.to_vec()))
80+
Err(error) => {
81+
Err(GetPayloadError::deserialize(error, decrypted.clone()))
8482
},
85-
Err(Err::Incomplete(needed)) => {
86-
Err(GetPayloadError::incomplete(needed, self.payload.to_vec()))
87-
},
88-
Err(Err::Error(error)) => {
89-
let (_, kind) = error;
90-
Err(GetPayloadError::deserialize(kind, self.payload.to_vec()))
91-
},
92-
Err(Err::Failure(e)) => panic!("CookieResponsePayload deserialize failed with unrecoverable error: {:?}", e),
9383
Ok((_, payload)) => {
9484
Ok(payload)
9585
}
@@ -139,8 +129,8 @@ impl ToBytes for CookieResponsePayload {
139129
#[cfg(test)]
140130
mod tests {
141131
use super::*;
142-
use nom::{Needed,
143-
error::ErrorKind
132+
use nom::{Needed, Err,
133+
error::ErrorKind
144134
};
145135

146136
encode_decode_test!(
@@ -221,8 +211,11 @@ mod tests {
221211
payload: invalid_payload_encoded
222212
};
223213
let decoded_payload = invalid_packet.get_payload(&shared_secret);
224-
assert!(decoded_payload.is_err());
225-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Deserialize { error: ErrorKind::Eof, payload: invalid_packet.payload });
214+
let error = decoded_payload.err().unwrap();
215+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize {
216+
error: Err::Error(("***".to_owned(), ErrorKind::Eof)),
217+
payload: invalid_payload.to_vec()
218+
});
226219
// Try short incomplete array
227220
let invalid_payload = [];
228221
let invalid_payload_encoded = seal_precomputed(&invalid_payload, &nonce, &shared_secret);
@@ -231,7 +224,10 @@ mod tests {
231224
payload: invalid_payload_encoded
232225
};
233226
let decoded_payload = invalid_packet.get_payload(&shared_secret);
234-
assert!(decoded_payload.is_err());
235-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::IncompletePayload { needed: Needed::Size(24), payload: invalid_packet.payload });
227+
let error = decoded_payload.err().unwrap();
228+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize {
229+
error: Err::Incomplete(Needed::Size(24)),
230+
payload: invalid_payload.to_vec()
231+
});
236232
}
237233
}

src/toxcore/dht/packet/crypto_data.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
*/
33

44
use byteorder::{ByteOrder, BigEndian};
5-
use nom::{Needed, Err,
6-
number::complete::{be_u16, be_u32},
5+
use nom::{number::complete::{be_u16, be_u32},
76
combinator::rest,
87
};
98

@@ -94,17 +93,9 @@ impl CryptoData {
9493
GetPayloadError::decrypt()
9594
})?;
9695
match CryptoDataPayload::from_bytes(&decrypted) {
97-
Err(Err::Incomplete(Needed::Unknown)) => {
98-
Err(GetPayloadError::incomplete(Needed::Unknown, self.payload.to_vec()))
96+
Err(error) => {
97+
Err(GetPayloadError::deserialize(error, decrypted.clone()))
9998
},
100-
Err(Err::Incomplete(needed)) => {
101-
Err(GetPayloadError::incomplete(needed, self.payload.to_vec()))
102-
},
103-
Err(Err::Error(error)) => {
104-
let (_, kind) = error;
105-
Err(GetPayloadError::deserialize(kind, self.payload.to_vec()))
106-
},
107-
Err(Err::Failure(e)) => panic!("CryptoDataPayload deserialize failed with unrecoverable error: {:?}", e),
10899
Ok((_, payload)) => {
109100
Ok(payload)
110101
}
@@ -157,7 +148,9 @@ impl ToBytes for CryptoDataPayload {
157148
#[cfg(test)]
158149
mod tests {
159150
use super::*;
160-
use nom::error::ErrorKind;
151+
use nom::{Err,
152+
error::ErrorKind
153+
};
161154

162155
encode_decode_test!(
163156
crypto_data_encode_decode,
@@ -224,8 +217,8 @@ mod tests {
224217
);
225218
// try to decode payload with eve's shared secret
226219
let decoded_payload = crypto_data.get_payload(&eve_shared_secret, &nonce);
227-
assert!(decoded_payload.is_err());
228-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Decrypt);
220+
let error = decoded_payload.err().unwrap();
221+
assert_eq!(*error.kind(), GetPayloadErrorKind::Decrypt);
229222
}
230223

231224
#[test]
@@ -244,7 +237,7 @@ mod tests {
244237
payload: invalid_payload_encoded
245238
};
246239
let decoded_payload = invalid_packet.get_payload(&shared_secret, &nonce);
247-
assert!(decoded_payload.is_err());
248-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Deserialize { error: ErrorKind::Eof, payload: invalid_packet.payload });
240+
let error = decoded_payload.err().unwrap();
241+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize { error: Err::Error(("".to_owned(), ErrorKind::Eof)), payload: invalid_payload.to_vec() });
249242
}
250243
}

src/toxcore/dht/packet/crypto_handshake.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/*! CryptoHandshake packet
22
*/
33

4-
use nom::{Err, Needed};
54
use crate::toxcore::binary_io::*;
65
use crate::toxcore::crypto_core::*;
76
use crate::toxcore::dht::packet::cookie::EncryptedCookie;
@@ -91,17 +90,9 @@ impl CryptoHandshake {
9190
GetPayloadError::decrypt()
9291
})?;
9392
match CryptoHandshakePayload::from_bytes(&decrypted) {
94-
Err(Err::Incomplete(Needed::Unknown)) => {
95-
Err(GetPayloadError::incomplete(Needed::Unknown, self.payload.to_vec()))
93+
Err(error) => {
94+
Err(GetPayloadError::deserialize(error, decrypted.clone()))
9695
},
97-
Err(Err::Incomplete(needed)) => {
98-
Err(GetPayloadError::incomplete(needed, self.payload.to_vec()))
99-
},
100-
Err(Err::Error(error)) => {
101-
let (_, kind) = error;
102-
Err(GetPayloadError::deserialize(kind, self.payload.to_vec()))
103-
},
104-
Err(Err::Failure(e)) => panic!("CryptoHandshakePayload deserialize failed with unrecoverable error: {:?}", e),
10596
Ok((_, payload)) => {
10697
Ok(payload)
10798
}
@@ -171,7 +162,7 @@ impl ToBytes for CryptoHandshakePayload {
171162
#[cfg(test)]
172163
mod tests {
173164
use super::*;
174-
use nom::Needed;
165+
use nom::{Needed, Err};
175166

176167
encode_decode_test!(
177168
crypto_handshake_encode_decode,
@@ -250,8 +241,8 @@ mod tests {
250241
let dht_packet = CryptoHandshake::new(&shared_secret, &payload, cookie);
251242
// try to decode payload with eve's shared secret
252243
let decoded_payload = dht_packet.get_payload(&eve_shared_secret);
253-
assert!(decoded_payload.is_err());
254-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::Decrypt);
244+
let error = decoded_payload.err().unwrap();
245+
assert_eq!(*error.kind(), GetPayloadErrorKind::Decrypt);
255246
}
256247

257248
#[test]
@@ -274,8 +265,11 @@ mod tests {
274265
payload: invalid_payload_encoded
275266
};
276267
let decoded_payload = invalid_packet.get_payload(&shared_secret);
277-
assert!(decoded_payload.is_err());
278-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::IncompletePayload { needed: Needed::Size(24), payload: invalid_packet.payload });
268+
let error = decoded_payload.err().unwrap();
269+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize {
270+
error: Err::Incomplete(Needed::Size(24)),
271+
payload: invalid_payload.to_vec()
272+
});
279273
// Try short incomplete array
280274
let invalid_payload = [];
281275
let invalid_payload_encoded = seal_precomputed(&invalid_payload, &nonce, &shared_secret);
@@ -285,7 +279,10 @@ mod tests {
285279
payload: invalid_payload_encoded
286280
};
287281
let decoded_payload = invalid_packet.get_payload(&shared_secret);
288-
assert!(decoded_payload.is_err());
289-
assert_eq!(*decoded_payload.err().unwrap().kind(), GetPayloadErrorKind::IncompletePayload { needed: Needed::Size(24), payload: invalid_packet.payload });
282+
let error = decoded_payload.err().unwrap();
283+
assert_eq!(*error.kind(), GetPayloadErrorKind::Deserialize {
284+
error: Err::Incomplete(Needed::Size(24)),
285+
payload: invalid_payload.to_vec()
286+
});
290287
}
291288
}

0 commit comments

Comments
 (0)