Coverage Report

Created: 2025-10-10 07:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/revision-0.10.0/src/implementations/option.rs
Line
Count
Source
1
use super::super::Error;
2
use super::super::Revisioned;
3
4
impl<T> Revisioned for Option<T>
5
where
6
  T: Revisioned,
7
{
8
  #[inline]
9
0
  fn serialize_revisioned<W: std::io::Write>(&self, writer: &mut W) -> Result<(), Error> {
10
0
    match self {
11
0
      Some(value) => {
12
0
        1u8.serialize_revisioned(writer)?;
13
0
        value.serialize_revisioned(writer)
14
      }
15
0
      None => 0u8.serialize_revisioned(writer),
16
    }
17
0
  }
18
19
  #[inline]
20
0
  fn deserialize_revisioned<R: std::io::Read>(reader: &mut R) -> Result<Self, Error> {
21
0
    let option = u8::deserialize_revisioned(reader)?;
22
0
    match option {
23
0
      0u8 => Ok(None),
24
0
      1u8 => Ok(Some(T::deserialize_revisioned(reader)?)),
25
0
      value => Err(Error::Deserialize(format!("Invalid option value {}", value))),
26
    }
27
0
  }
28
29
0
  fn revision() -> u16 {
30
0
    1
31
0
  }
32
}
33
34
#[cfg(test)]
35
mod tests {
36
37
  use super::Revisioned;
38
39
  #[test]
40
  fn test_option_none() {
41
    let val: Option<String> = None;
42
    let mut mem: Vec<u8> = vec![];
43
    val.serialize_revisioned(&mut mem).unwrap();
44
    assert_eq!(mem.len(), 1);
45
    let out =
46
      <Option<String> as Revisioned>::deserialize_revisioned(&mut mem.as_slice()).unwrap();
47
    assert_eq!(val, out);
48
  }
49
50
  #[test]
51
  fn test_option_some() {
52
    let val: Option<String> = Some(String::from("this is a test"));
53
    let mut mem: Vec<u8> = vec![];
54
    val.serialize_revisioned(&mut mem).unwrap();
55
    assert_eq!(mem.len(), 16);
56
    let out =
57
      <Option<String> as Revisioned>::deserialize_revisioned(&mut mem.as_slice()).unwrap();
58
    assert_eq!(val, out);
59
  }
60
}