12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- use binrw::{binrw, BinRead, BinWrite};
- use std::ops::{Deref, DerefMut};
- /// Wrapper to prefix array of single type
- #[binrw]
- #[derive(Debug, PartialEq)]
- pub struct ArrayOf<T>
- where
- // Static bounds due to https://github.com/jam1garner/binrw/issues/199
- T: for<'a> BinRead<Args<'a> = ()> + 'static,
- T: for<'a> BinWrite<Args<'a> = ()> + 'static,
- {
- // Temporary variable that holds number of elements
- #[br(temp)]
- #[bw(try_calc(u32::try_from(value.len())))]
- count: u32,
- #[br(count = count)]
- pub value: Vec<T>,
- }
- impl<T> Deref for ArrayOf<T>
- where
- T: for<'a> BinRead<Args<'a> = ()> + 'static,
- T: for<'a> BinWrite<Args<'a> = ()> + 'static,
- {
- type Target = Vec<T>;
- fn deref(&self) -> &Self::Target {
- &self.value
- }
- }
- impl<T> DerefMut for ArrayOf<T>
- where
- T: for<'a> BinRead<Args<'a> = ()> + 'static,
- T: for<'a> BinWrite<Args<'a> = ()> + 'static,
- {
- fn deref_mut(&mut self) -> &mut Self::Target {
- &mut self.value
- }
- }
- impl<T> From<Vec<T>> for ArrayOf<T>
- where
- T: for<'a> BinRead<Args<'a> = ()> + 'static,
- T: for<'a> BinWrite<Args<'a> = ()> + 'static,
- {
- fn from(value: Vec<T>) -> Self {
- Self { value }
- }
- }
|