/rust/registry/src/index.crates.io-1949cf8c6b5b557f/revision-0.30.0/src/implementations/result.rs
Line | Count | Source |
1 | | use crate::DeserializeRevisioned; |
2 | | use crate::SerializeRevisioned; |
3 | | |
4 | | use super::super::Error; |
5 | | use super::super::Revisioned; |
6 | | |
7 | | impl<E: SerializeRevisioned, T: SerializeRevisioned> SerializeRevisioned for Result<T, E> { |
8 | | #[inline] |
9 | 0 | fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> { |
10 | 0 | match self { |
11 | 0 | Ok(v) => { |
12 | 0 | 0u32.serialize_revisioned(writer)?; |
13 | 0 | v.serialize_revisioned(writer) |
14 | | } |
15 | 0 | Err(e) => { |
16 | 0 | 1u32.serialize_revisioned(writer)?; |
17 | 0 | e.serialize_revisioned(writer) |
18 | | } |
19 | | } |
20 | 0 | } |
21 | | } |
22 | | |
23 | | impl<E: DeserializeRevisioned, T: DeserializeRevisioned> DeserializeRevisioned for Result<T, E> { |
24 | | #[inline] |
25 | 0 | fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> { |
26 | 0 | let variant = u32::deserialize_revisioned(reader)?; |
27 | 0 | match variant { |
28 | 0 | 0 => Ok(Ok(T::deserialize_revisioned(reader) |
29 | 0 | .map_err(|ref err| Error::Deserialize(format!("{:?}", err)))?)), |
30 | 0 | 1 => Ok(Err(E::deserialize_revisioned(reader) |
31 | 0 | .map_err(|ref err| Error::Deserialize(format!("{:?}", err)))?)), |
32 | 0 | _ => Err(Error::Deserialize("Unknown variant index".to_string())), |
33 | | } |
34 | 0 | } |
35 | | } |
36 | | |
37 | | impl<E: Revisioned, T: Revisioned> Revisioned for Result<T, E> { |
38 | | #[inline] |
39 | 0 | fn revision() -> u16 { |
40 | 0 | 1 |
41 | 0 | } |
42 | | } |
43 | | |
44 | | #[cfg(test)] |
45 | | mod tests { |
46 | | |
47 | | use super::*; |
48 | | |
49 | | #[test] |
50 | | fn test_result_ok() { |
51 | | let val: Result<bool, String> = Ok(true); |
52 | | let mut mem: Vec<u8> = vec![]; |
53 | | val.serialize_revisioned(&mut mem).unwrap(); |
54 | | #[cfg(not(feature = "fixed-width-encoding"))] |
55 | | assert_eq!(mem.len(), 2); |
56 | | #[cfg(feature = "fixed-width-encoding")] |
57 | | assert_eq!(mem.len(), 5); |
58 | | let out = <Result<bool, String> as DeserializeRevisioned>::deserialize_revisioned( |
59 | | &mut mem.as_slice(), |
60 | | ) |
61 | | .unwrap(); |
62 | | assert_eq!(val, out); |
63 | | } |
64 | | |
65 | | #[test] |
66 | | fn test_result_err() { |
67 | | let val: Result<bool, String> = Err("some error".into()); |
68 | | let mut mem: Vec<u8> = vec![]; |
69 | | val.serialize_revisioned(&mut mem).unwrap(); |
70 | | #[cfg(not(feature = "fixed-width-encoding"))] |
71 | | assert_eq!(mem.len(), 12); |
72 | | #[cfg(feature = "fixed-width-encoding")] |
73 | | assert_eq!(mem.len(), 22); |
74 | | let out = <Result<bool, String> as DeserializeRevisioned>::deserialize_revisioned( |
75 | | &mut mem.as_slice(), |
76 | | ) |
77 | | .unwrap(); |
78 | | assert_eq!(val, out); |
79 | | } |
80 | | } |