1 //! First tests for new `dissolve` functionality
2 use serde::{Serialize, Deserialize};
3 use derive_getters::Dissolve;
4
5 #[derive(Dissolve, Serialize, Deserialize)]
6 struct Number {
7 num: u64,
8 }
9
10 #[derive(Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
11 struct Inner {
12 a: u64,
13 b: i64,
14 }
15
16 #[derive(Dissolve, Serialize, Deserialize)]
17 struct ManyStuff {
18 name: String,
19 price: f64,
20 count: usize,
21 inner: Inner,
22 }
23
24 #[derive(Dissolve, Serialize, Deserialize)]
25 #[dissolve(rename = "shatter")]
26 struct LotsOfStuff {
27 name: String,
28 price: f64,
29 count: usize,
30 inner: Inner,
31 }
32
33 impl LotsOfStuff {
dissolve(&self) -> f6434 fn dissolve(&self) -> f64 {
35 self.inner.b as f64 * self.price
36 }
37 }
38
main()39 fn main() {
40 let n = Number { num: 64 };
41 let number = n.dissolve();
42 assert!(number == 64);
43
44 let inner = Inner { a: 22, b: -33 };
45 let stuff = ManyStuff {
46 name: "Hogie".to_owned(),
47 price: 123.4f64,
48 count: 100,
49 inner,
50 };
51 let (n, p, c, i) = stuff.dissolve();
52 assert!(n == "Hogie");
53 assert!(p == 123.4f64);
54 assert!(c == 100);
55 assert!(i == inner);
56
57 //let _ = stuff.dissolve();
58
59 let stuff = LotsOfStuff {
60 name: "Hogie".to_owned(),
61 price: 123.4f64,
62 count: 100,
63 inner,
64 };
65 let (n, p, c, i) = stuff.shatter();
66 assert!(n == "Hogie");
67 assert!(p == 123.4f64);
68 assert!(c == 100);
69 assert!(i == inner);
70
71 //let _ = stuff.shatter();
72 }
73