memorypack 1.2.1

A rust implementation of Cysharp/MemoryPack
Documentation
use crate::error::MemoryPackError;
use crate::reader::MemoryPackReader;
use crate::traits::{MemoryPackDeserialize, MemoryPackSerialize};
use crate::writer::MemoryPackWriter;

#[cfg(feature = "num-complex")]
impl MemoryPackSerialize for num_complex::Complex<f64> {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        writer.write_f64(self.re)?;
        writer.write_f64(self.im)
    }
}

#[cfg(feature = "num-complex")]
impl MemoryPackDeserialize for num_complex::Complex<f64> {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        let re = reader.read_f64()?;
        let im = reader.read_f64()?;
        Ok(num_complex::Complex::new(re, im))
    }
}

#[cfg(feature = "glam")]
impl MemoryPackSerialize for glam::Vec2 {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        let arr = self.to_array();
        writer.write_f32(arr[0])?;
        writer.write_f32(arr[1])
    }
}

#[cfg(feature = "glam")]
impl MemoryPackDeserialize for glam::Vec2 {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        Ok(glam::Vec2::from_array([
            reader.read_f32()?,
            reader.read_f32()?,
        ]))
    }
}

#[cfg(feature = "glam")]
impl MemoryPackSerialize for glam::Vec3 {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        let arr = self.to_array();
        writer.write_f32(arr[0])?;
        writer.write_f32(arr[1])?;
        writer.write_f32(arr[2])
    }
}

#[cfg(feature = "glam")]
impl MemoryPackDeserialize for glam::Vec3 {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        Ok(glam::Vec3::from_array([
            reader.read_f32()?,
            reader.read_f32()?,
            reader.read_f32()?,
        ]))
    }
}

#[cfg(feature = "glam")]
impl MemoryPackSerialize for glam::Vec4 {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        let arr = self.to_array();
        writer.write_f32(arr[0])?;
        writer.write_f32(arr[1])?;
        writer.write_f32(arr[2])?;
        writer.write_f32(arr[3])
    }
}

#[cfg(feature = "glam")]
impl MemoryPackDeserialize for glam::Vec4 {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        Ok(glam::Vec4::from_array([
            reader.read_f32()?,
            reader.read_f32()?,
            reader.read_f32()?,
            reader.read_f32()?,
        ]))
    }
}

#[cfg(feature = "glam")]
impl MemoryPackSerialize for glam::Quat {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        let arr = self.to_array();
        writer.write_f32(arr[0])?;
        writer.write_f32(arr[1])?;
        writer.write_f32(arr[2])?;
        writer.write_f32(arr[3])
    }
}

#[cfg(feature = "glam")]
impl MemoryPackDeserialize for glam::Quat {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        Ok(glam::Quat::from_array([
            reader.read_f32()?,
            reader.read_f32()?,
            reader.read_f32()?,
            reader.read_f32()?,
        ]))
    }
}

#[cfg(feature = "glam")]
impl MemoryPackSerialize for glam::Mat3A {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        let cols = self.to_cols_array();
        writer.write_f32(cols[0])?;
        writer.write_f32(cols[3])?;
        writer.write_f32(cols[1])?;
        writer.write_f32(cols[4])?;
        writer.write_f32(cols[2])?;
        writer.write_f32(cols[5])
    }
}

#[cfg(feature = "glam")]
impl MemoryPackDeserialize for glam::Mat3A {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        let m11 = reader.read_f32()?;
        let m12 = reader.read_f32()?;
        let m21 = reader.read_f32()?;
        let m22 = reader.read_f32()?;
        let m31 = reader.read_f32()?;
        let m32 = reader.read_f32()?;
        Ok(glam::Mat3A::from_cols(
            glam::Vec3A::new(m11, m12, 0.0),
            glam::Vec3A::new(m21, m22, 0.0),
            glam::Vec3A::new(m31, m32, 1.0),
        ))
    }
}

#[cfg(feature = "glam")]
impl MemoryPackSerialize for glam::Mat4 {
    #[inline(always)]
    fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
        let arr = self.to_cols_array();
        for &val in &arr {
            writer.write_f32(val)?;
        }
        Ok(())
    }
}

#[cfg(feature = "glam")]
impl MemoryPackDeserialize for glam::Mat4 {
    #[inline(always)]
    fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
        let mut arr = [0.0f32; 16];
        for val in &mut arr {
            *val = reader.read_f32()?;
        }
        Ok(glam::Mat4::from_cols_array(&arr))
    }
}