blob: 302d1ccff544b4c40efa436bd2478a253da2ee5c [file] [log] [blame] [edit]
//! First tests for new `dissolve` functionality
use serde::{Serialize, Deserialize};
use derive_getters::Dissolve;
#[derive(Dissolve, Serialize, Deserialize)]
struct Number {
num: u64,
}
#[derive(Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
struct Inner {
a: u64,
b: i64,
}
#[derive(Dissolve, Serialize, Deserialize)]
struct ManyStuff {
name: String,
price: f64,
count: usize,
inner: Inner,
}
#[derive(Dissolve, Serialize, Deserialize)]
#[dissolve(rename = "shatter")]
struct LotsOfStuff {
name: String,
price: f64,
count: usize,
inner: Inner,
}
impl LotsOfStuff {
fn dissolve(&self) -> f64 {
self.inner.b as f64 * self.price
}
}
fn main() {
let n = Number { num: 64 };
let number = n.dissolve();
assert!(number == 64);
let inner = Inner { a: 22, b: -33 };
let stuff = ManyStuff {
name: "Hogie".to_owned(),
price: 123.4f64,
count: 100,
inner,
};
let (n, p, c, i) = stuff.dissolve();
assert!(n == "Hogie");
assert!(p == 123.4f64);
assert!(c == 100);
assert!(i == inner);
//let _ = stuff.dissolve();
let stuff = LotsOfStuff {
name: "Hogie".to_owned(),
price: 123.4f64,
count: 100,
inner,
};
let (n, p, c, i) = stuff.shatter();
assert!(n == "Hogie");
assert!(p == 123.4f64);
assert!(c == 100);
assert!(i == inner);
//let _ = stuff.shatter();
}