diff options
Diffstat (limited to 'tests/07-dissolve-basic.rs')
-rw-r--r-- | tests/07-dissolve-basic.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/07-dissolve-basic.rs b/tests/07-dissolve-basic.rs new file mode 100644 index 0000000..302d1cc --- /dev/null +++ b/tests/07-dissolve-basic.rs @@ -0,0 +1,72 @@ +//! 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(); +} |