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}