bin_layout/types/
enumerate.rs

1use crate::*;
2
3impl<T: Encoder> Encoder for Option<T> {
4    fn encoder(&self, c: &mut impl Write) -> io::Result<()> {
5        match self {
6            Some(val) => {
7                c.write_all(&[1])?;
8                val.encoder(c)
9            }
10            None => c.write_all(&[0]),
11        }
12    }
13}
14
15impl<'de, T: Decoder<'de>> Decoder<'de> for Option<T> {
16    fn decoder(r: &mut &'de [u8]) -> Result<Self> {
17        Ok(match bool::decoder(r)? {
18            true => Some(T::decoder(r)?),
19            false => None,
20        })
21    }
22}
23
24impl<T: Encoder, E: Encoder> Encoder for std::result::Result<T, E> {
25    fn encoder(&self, c: &mut impl Write) -> io::Result<()> {
26        match self {
27            Ok(val) => {
28                c.write_all(&[1])?;
29                val.encoder(c)
30            }
31            Err(err) => {
32                c.write_all(&[0])?;
33                err.encoder(c)
34            }
35        }
36    }
37}
38
39impl<'de, T: Decoder<'de>, E: Decoder<'de>> Decoder<'de> for std::result::Result<T, E> {
40    fn decoder(c: &mut &'de [u8]) -> Result<Self> {
41        Ok(match bool::decoder(c)? {
42            true => Ok(T::decoder(c)?),
43            false => Err(E::decoder(c)?),
44        })
45    }
46}