Skip to main content

sharky_arrayvec/
deku.rs

1use crate::ArrayVec;
2use deku::prelude::*;
3
4impl<'a, const N: usize, T: DekuReader<'a>> DekuReader<'a, usize> for ArrayVec<N, T> {
5    #[inline]
6    fn from_reader_with_ctx<R: deku::no_std_io::Read + deku::no_std_io::Seek>(
7        reader: &mut Reader<R>,
8        len: usize,
9    ) -> Result<Self, DekuError>
10    where
11        Self: Sized, {
12        let mut vec = ArrayVec::new();
13
14        for _ in 0..len {
15            let item = T::from_reader_with_ctx(reader, ())?;
16            vec.push(item);
17        }
18
19        Ok(vec)
20    }
21}
22
23impl<const N: usize, T: DekuWriter> DekuWriter<usize> for ArrayVec<N, T> {
24    #[inline]
25    fn to_writer<W: deku::no_std_io::Write + deku::no_std_io::Seek>(
26        &self,
27        writer: &mut Writer<W>,
28        _ctx: usize,
29    ) -> Result<(), DekuError> {
30        for item in self.iter() {
31            item.to_writer(writer, ())?;
32        }
33        Ok(())
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[derive(Debug, Clone, DekuRead, DekuWrite)]
42    struct Cum {
43        #[deku(ctx = "5")]
44        in_me: ArrayVec<10, u8>,
45    }
46}