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