bin_layout/types/
enumerate.rs1use 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}