infallible_builder/
lib.rs1
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#[cfg(test)]
22mod tests {
23
24 use super::exports as infallible_builder;
25 use super::exports::Builder;
26 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 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(PartialEq, SmartDefault)]
78 #[Builder]
79 struct Animal {
80 #[default(Species::Dog)]
81 pub species: Species,
82 }
83
84 #[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}