1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
//! First tests for new `dissolve` functionality
use serde::{Serialize, Deserialize};
use derive_getters::Dissolve;
#[derive(Dissolve, Serialize, Deserialize)]
struct Empty {}
#[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 e = Empty {};
let unit = e.dissolve();
assert!(unit == ());
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();
}
|