Coverage Report

Created: 2026-07-13 08:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}