infallible_builder/
lib.rs1pub use infallible_builder_macro::Builder;
3
4#[cfg(test)]
5mod tests {
6 use super::*;
7 use smart_default::SmartDefault;
8
9 #[derive(Default)]
10 #[Builder]
11 struct Person {
12 name: String,
13 age: i64,
14 birthday: Option<String>,
15 }
16
17 #[test]
18 fn builder_sets_fields_correctly() {
19 let person = Person::builder()
20 .name("Alice")
21 .age(30)
22 .build();
23 assert_eq!(person.name, "Alice");
24 assert_eq!(person.age, 30);
25 }
26
27 #[test]
28 fn builder_is_owned() {
29 let mut person_builder = Person::builder();
30 person_builder = person_builder.name("Bob");
31 person_builder = person_builder.age(25);
32 let person = person_builder.build();
33 assert_eq!(person.name, "Bob");
34 assert_eq!(person.age, 25);
35 }
36
37 #[test]
38 fn builder_uses_defaults() {
39 let person = Person::builder().build();
40 assert_eq!(person.name, "");
41 assert_eq!(person.age, 0);
42 assert_eq!(person.birthday, None);
43 }
44
45 #[test]
46 fn builder_strips_option() {
47 let person = Person::builder()
49 .birthday("2000-01-01")
50 .build();
51 assert_eq!(person.birthday, Some("2000-01-01".to_string()));
52 }
53
54 #[test]
55 fn builder_works_with_smart_default() {
56 #[derive(PartialEq, SmartDefault)]
58 #[Builder]
59 struct Animal {
60 #[default(Species::Dog)]
61 pub species: Species,
62 }
63
64 #[derive(Debug, PartialEq)]
66 #[allow(dead_code)]
67 enum Species {
68 Dog,
69 Cat,
70 }
71
72 let animal = Animal::builder().build();
73 assert_eq!(animal.species, Species::Dog);
74 }
75}