73 lines
1.4 KiB
Rust
73 lines
1.4 KiB
Rust
//! 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();
|
|
}
|