summaryrefslogtreecommitdiff
path: root/src/lib.rs
blob: e4be833240e156a8898fe5a8d7894877bad979e3 (plain)
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
pub fn build<T: Default>() -> T {
    T::default()
}

pub fn build_with<T, F>(initializer: F) -> T
where
    T: Default,
    F: std::ops::FnOnce(&mut T),
{
    let mut item = build::<T>();
    initializer(&mut item);
    item
}

#[cfg(test)]
mod tests {
    use super::*;

    #[derive(Default)]
    struct Person {
        name: String,
        age: i32,
    }

    #[test]
    fn build_test_it_builds_a_new_instance_with_default_values() {
        let item = build::<Person>();

        assert_eq!(item.name, "");
        assert_eq!(item.age, 0);
    }

    #[test]
    fn build_with_test_initializes_the_new_instance() {
        let item = build_with(|item: &mut Person| {
            item.name = String::from("pidge");
            item.age = 42;
        });

        assert_eq!(item.name, "pidge");
        assert_eq!(item.age, 42);
    }
}