main
1pub fn build<T: Default>() -> T {
2 T::default()
3}
4
5pub fn build_with<T, F>(initializer: F) -> T
6where
7 T: Default,
8 F: std::ops::FnOnce(&mut T),
9{
10 let mut item = build::<T>();
11 initializer(&mut item);
12 item
13}
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18
19 #[derive(Default)]
20 struct Person {
21 name: String,
22 age: i32,
23 }
24
25 #[test]
26 fn build_test_it_builds_a_new_instance_with_default_values() {
27 let item = build::<Person>();
28
29 assert_eq!(item.name, "");
30 assert_eq!(item.age, 0);
31 }
32
33 #[test]
34 fn build_with_test_initializes_the_new_instance() {
35 let item = build_with(|item: &mut Person| {
36 item.name = String::from("pidge");
37 item.age = 42;
38 });
39
40 assert_eq!(item.name, "pidge");
41 assert_eq!(item.age, 42);
42 }
43}