capwriter 0.2.0

Fast saving and loading with annotating cap for vector and slice
Documentation
use crate::{Save, Load, EndianType, ReadBytesExt};
use bytemuck::{
    Pod,
    cast_slice_mut as as_u8_mut_buf,
};
use std::io::{Read, Write, Error};

impl<T: Pod> Save for Vec<T> {
    fn save_to<W>(&self, writer: W) -> Result<(), Error> where
        W: Write,
    {
        (self as &[T]).save_to(writer)
    }
    fn to_be_saved_size(&self) -> usize {
        (self as &[T]).to_be_saved_size()
    }
}
impl<T: Pod> Load for Vec<T> {
    fn load_from<R>(mut reader: R) -> Result<Self, Error> where
        R: Read,
        Self: Sized,
    {
        #[cfg(target_pointer_width = "32")]
        let len = reader.read_u32::<EndianType>()? as usize;
        #[cfg(target_pointer_width = "64")]
        let len = reader.read_u64::<EndianType>()? as usize;

        let mut buffer = vec![T::zeroed(); len];
        let casted_buffer: &mut [u8] = as_u8_mut_buf(&mut buffer);
        reader.read_exact(casted_buffer)?;

        Ok(buffer)
    }
}