Skip to content

Commit

Permalink
Adding optional serde feature (#173)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelciraci authored Aug 12, 2024
1 parent 3d24ade commit b97ab44
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ default = ["std"]
# Activate `std` within the crate. Currently this gives a much faster `sqrt`
# impl when an explicit hardware sqrt isn't available.
std = []
serde = ["dep:serde"]

[dependencies]
safe_arch = { version = "0.7", features = ["bytemuck"] }
serde = { version = "1", default-features = false, optional = true }
bytemuck = "1"

[dev-dependencies]
Expand Down
54 changes: 54 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ use safe_arch::*;

use bytemuck::*;

#[cfg(feature = "serde")]
use serde::{ser::SerializeSeq, Deserialize, Serialize};

#[macro_use]
mod macros;

Expand Down Expand Up @@ -975,3 +978,54 @@ bulk_impl_const_rhs_op!((CmpGt, cmp_gt) => [(f64x4, f64), (f64x2, f64), (f32x4,f
bulk_impl_const_rhs_op!((CmpNe, cmp_ne) => [(f64x4, f64), (f64x2, f64), (f32x4,f32), (f32x8,f32),]);
bulk_impl_const_rhs_op!((CmpLe, cmp_le) => [(f64x4, f64), (f64x2, f64), (f32x4,f32), (f32x8,f32),]);
bulk_impl_const_rhs_op!((CmpGe, cmp_ge) => [(f64x4, f64), (f64x2, f64), (f32x4,f32), (f32x8,f32),]);

macro_rules! impl_serde {
($i:ident, $t:ty) => {
#[cfg(feature = "serde")]
impl Serialize for $i {
#[inline]
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let array = self.as_array_ref();
let mut seq = serializer.serialize_seq(Some(array.len()))?;
for e in array {
seq.serialize_element(e)?;
}
seq.end()
}
}

#[cfg(feature = "serde")]
impl<'de> Deserialize<'de> for $i {
#[inline]
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
Ok(<$t>::deserialize(deserializer)?.into())
}
}
};
}

impl_serde!(f32x8, [f32; 8]);
impl_serde!(f32x4, [f32; 4]);
impl_serde!(f64x4, [f64; 4]);
impl_serde!(f64x2, [f64; 2]);
impl_serde!(i8x16, [i8; 16]);
impl_serde!(i16x16, [i16; 16]);
impl_serde!(i8x32, [i8; 32]);
impl_serde!(i16x8, [i16; 8]);
impl_serde!(i32x4, [i32; 4]);
impl_serde!(i32x8, [i32; 8]);
impl_serde!(i64x2, [i64; 2]);
impl_serde!(i64x4, [i64; 4]);
impl_serde!(u8x16, [u8; 16]);
impl_serde!(u16x8, [u16; 8]);
impl_serde!(u16x16, [u16; 16]);
impl_serde!(u32x4, [u32; 4]);
impl_serde!(u32x8, [u32; 8]);
impl_serde!(u64x2, [u64; 2]);
impl_serde!(u64x4, [u64; 4]);

0 comments on commit b97ab44

Please sign in to comment.