Skip to content

Commit 2fe650a

Browse files
miloyipLuthaf
authored andcommitted
fix: make serde working with SOA
1 parent aaf8416 commit 2fe650a

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ soa_derive_internal = {path = "soa-derive-internal", version = "0.10"}
2323

2424
[dev-dependencies]
2525
bencher = "0.1"
26+
serde = { version = "1.0.130", features = ["derive"] }
27+
serde_json = "1.0.68"
2628

2729
[[bench]]
2830
name = "soa"

soa-derive-internal/src/input.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ impl Input {
6868
.cloned()
6969
.filter(|name| name != "Clone")
7070
.filter(|name| name != "Deserialize")
71+
.filter(|name| name != "Serialize")
7172
.collect::<Vec<_>>();
7273
quote!(
7374
#[derive(

tests/serde.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use serde::{Deserialize, Serialize};
2+
use soa_derive::StructOfArray;
3+
4+
#[derive(Debug, Clone, PartialEq, StructOfArray)]
5+
#[soa_derive = "Debug, Clone, PartialEq, Serialize, Deserialize"]
6+
pub struct Particle {
7+
pub name: String,
8+
pub mass: f64,
9+
}
10+
11+
impl Particle {
12+
pub fn new(name: String, mass: f64) -> Self {
13+
Particle {
14+
name: name,
15+
mass: mass,
16+
}
17+
}
18+
}
19+
20+
#[test]
21+
fn serde_test() -> Result<(), serde_json::Error> {
22+
let mut soa = ParticleVec::new();
23+
soa.push(Particle::new(String::from("Na"), 56.0));
24+
soa.push(Particle::new(String::from("Cl"), 35.0));
25+
26+
let json = serde_json::to_string(&soa)?;
27+
assert_eq!(json, r#"{"name":["Na","Cl"],"mass":[56.0,35.0]}"#);
28+
let soa2: ParticleVec = serde_json::from_str(&json)?;
29+
assert_eq!(soa, soa2);
30+
Ok(())
31+
}

0 commit comments

Comments
 (0)