Open
Description
Sometimes we derive serde's Serialize/Deserialize
for Struct of Array, by #[soa_derive(Serialize, Deserialize)]
.
By feature from #42, we are able to skip some Struct of Array's fields by #[soa_attr(Vec, serde(skip))]
, for example:
#[derive(StructOfArray)]
#[soa_derive(Serialize, Deserialize)]
struct Point {
x: f32,
y: f32,
// Skip serialization for PointVec::meta
#[soa_attr(Vec, serde(skip))]
meta: bool,
}
Serialize is ok, but deserialize will get a invalid PointVec
because it contains different length of field.
For example:
#[test]
fn serde_skip_test() -> Result<(), serde_json::Error> {
let mut soa = PointVec::new();
soa.push(Point { x: 1.0, y: 2.0, meta: true });
soa.push(Point { x: 3.0, y: 4.0, meta: false });
let json = serde_json::to_string(&soa)?;
assert_eq!(json, r#"{"x":[1.0,3.0],"y":[2.0,4.0]}"#);
let soa2: PointVec = serde_json::from_str(&json)?;
assert_eq!(&soa2, &PointVec {
x: vec![1.0, 3.0],
y: vec![2.0, 4.0],
meta: vec![] // This comes from Vec::default(), having different length with other fields
});
}
Metadata
Metadata
Assignees
Labels
No labels