bin_layout/types/
other.rs

1use crate::*;
2use std::ops::{Range, RangeInclusive};
3
4impl<T: Encoder> Encoder for Range<T> {
5    fn encoder(&self, c: &mut impl Write) -> io::Result<()> {
6        self.start.encoder(c)?;
7        self.end.encoder(c)
8    }
9}
10
11impl<'de, T: Decoder<'de>> Decoder<'de> for Range<T> {
12    fn decoder(c: &mut &'de [u8]) -> Result<Self> {
13        let start = T::decoder(c)?;
14        let end = T::decoder(c)?;
15        Ok(start..end)
16    }
17}
18
19impl<T: Encoder> Encoder for RangeInclusive<T> {
20    fn encoder(&self, c: &mut impl Write) -> io::Result<()> {
21        self.start().encoder(c)?;
22        self.end().encoder(c)
23    }
24}
25
26impl<'de, T: Decoder<'de>> Decoder<'de> for RangeInclusive<T> {
27    fn decoder(c: &mut &'de [u8]) -> Result<Self> {
28        let start = T::decoder(c)?;
29        let end = T::decoder(c)?;
30        Ok(start..=end)
31    }
32}