euphony-store 0.1.1

storage component for rendered output
Documentation
use euphony_compiler::Hash;
use euphony_units::coordinates::Cartesian;
use std::io;

pub trait ReadExt {
    fn read_coordinate(&mut self) -> io::Result<Cartesian<f64>>;
    fn read_u64(&mut self) -> io::Result<u64>;
    fn read_f32(&mut self) -> io::Result<f32>;
    fn read_f64(&mut self) -> io::Result<f64>;
    fn read_hash(&mut self) -> io::Result<Hash>;
}

impl<R: io::Read> ReadExt for R {
    #[inline]
    fn read_coordinate(&mut self) -> io::Result<Cartesian<f64>> {
        let x = self.read_f32()? as f64;
        let y = self.read_f32()? as f64;
        let z = self.read_f32()? as f64;
        let value = Cartesian { x, y, z };
        Ok(value)
    }

    #[inline]
    fn read_u64(&mut self) -> io::Result<u64> {
        let mut value = [0u8; 8];
        self.read_exact(&mut value)?;
        let value = u64::from_ne_bytes(value);
        Ok(value)
    }

    #[inline]
    fn read_f32(&mut self) -> io::Result<f32> {
        let mut value = [0u8; 4];
        self.read_exact(&mut value)?;
        let value = f32::from_ne_bytes(value);
        Ok(value)
    }

    #[inline]
    fn read_f64(&mut self) -> io::Result<f64> {
        let mut value = [0u8; 8];
        self.read_exact(&mut value)?;
        let value = f64::from_ne_bytes(value);
        Ok(value)
    }

    #[inline]
    fn read_hash(&mut self) -> io::Result<Hash> {
        let mut value = Hash::default();
        self.read_exact(&mut value)?;
        Ok(value)
    }
}