use serde::{Deserialize, Deserializer, Serialize, Serializer};
use crate::CBig;
use crate::DBig;
#[derive(Serialize, Deserialize)]
struct CBigRepr {
re: DBig,
im: DBig,
}
impl Serialize for CBig {
fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
CBigRepr {
re: self.re.clone(),
im: self.im.clone(),
}
.serialize(s)
}
}
impl<'de> Deserialize<'de> for CBig {
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
CBigRepr::deserialize(d).map(|repr| CBig::from_parts(repr.re, repr.im))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn json_round_trip() {
let z = CBig::from_f64(3.0, -4.0).expect("finite parts");
let json = serde_json::to_string(&z).expect("serialize CBig");
let back: CBig = serde_json::from_str(&json).expect("deserialize CBig");
assert_eq!(back.re().to_string(), z.re().to_string());
assert_eq!(back.im().to_string(), z.im().to_string());
}
}