Skip to main content

infallible_builder/
lib.rs

1
2
3mod exports {
4    pub use infallible_builder_macro::Builder;
5
6    #[doc(hidden)]
7    pub use ::derive_builder;
8
9    #[doc(hidden)]
10    pub use ::unwrap_infallible::UnwrapInfallible;
11}
12
13pub use exports::*;
14
15//pub use infallible_builder_macro::Builder;
16//#[doc(hidden)]
17//pub use ::derive_builder;
18//#[doc(hidden)]
19//pub use ::unwrap_infallible::UnwrapInfallible;
20
21#[cfg(test)]
22mod tests {
23
24    use super::exports as infallible_builder;
25    use super::exports::Builder;
26    //use super::*;
27    use smart_default::SmartDefault;
28
29    #[derive(Default)]
30    #[Builder]
31    struct Person {
32        name: String,
33        age: i64,
34        birthday: Option<String>,
35    }
36
37    #[test]
38    fn builder_sets_fields_correctly() {
39        let person = Person::builder()
40            .name("Alice")
41            .age(30)
42            .build();
43        assert_eq!(person.name, "Alice");
44        assert_eq!(person.age, 30);
45    }
46
47    #[test]
48    fn builder_is_owned() {
49        let mut person_builder = Person::builder();
50        person_builder = person_builder.name("Bob");
51        person_builder = person_builder.age(25);
52        let person = person_builder.build();
53        assert_eq!(person.name, "Bob");
54        assert_eq!(person.age, 25);
55    }
56
57    #[test]
58    fn builder_uses_defaults() {
59        let person = Person::builder().build();
60        assert_eq!(person.name, "");
61        assert_eq!(person.age, 0);
62        assert_eq!(person.birthday, None);
63    }
64
65    #[test]
66    fn builder_strips_option() {
67        // The builder should accept the inner type for Option fields
68        let person = Person::builder()
69            .birthday("2000-01-01")
70            .build();
71        assert_eq!(person.birthday, Some("2000-01-01".to_string()));
72    }
73
74    #[test]
75    fn builder_works_with_smart_default() {
76        //#[derive(SmartDefault, Builder)]
77        #[derive(PartialEq, SmartDefault)]
78        #[Builder]
79        struct Animal {
80            #[default(Species::Dog)]
81            pub species: Species,
82        }
83
84        // Non-Default type
85        #[derive(Debug, PartialEq)]
86        #[allow(dead_code)]
87        enum Species {
88            Dog,
89            Cat,
90        }
91
92        let animal = Animal::builder().build();
93        assert_eq!(animal.species, Species::Dog);
94    }
95}