postal_code/
collection.rs

1crate::ix!();
2
3#[derive(Builder, Debug)]
4#[builder(setter(into))]
5pub struct PostalCodeCollection {
6    // A collection of postal codes
7    #[builder(setter(each(name = "code")))]
8    codes: Vec<PostalCode>,
9}
10
11impl PostalCodeCollection {
12    pub fn len(&self) -> usize {
13        self.codes.len()
14    }
15}
16
17#[cfg(test)]
18mod postal_code_collection_tests {
19    use super::*;
20    use std::collections::HashSet;
21
22    #[test]
23    fn test_postal_code_collection() {
24        // Test building a collection using `#[builder(each = "code")]`
25        let pc1 = PostalCode::new(Country::USA, "12345").unwrap();
26        let pc2 = PostalCode::new(Country::France, "75001").unwrap();
27        let pc3 = PostalCode::new(Country::Canada, "K1A0B1").unwrap();
28
29        let collection = PostalCodeCollectionBuilder::default()
30            .code(pc1.clone())
31            .code(pc2.clone())
32            .code(pc3.clone())
33            .build()
34            .expect("All required fields set");
35
36        assert_eq!(collection.len(), 3);
37        let set: HashSet<_> = collection.codes.iter().collect();
38        assert!(set.contains(&pc1));
39        assert!(set.contains(&pc2));
40        assert!(set.contains(&pc3));
41    }
42
43    #[test]
44    fn test_postal_code_collection_empty() {
45        // Test an empty collection
46        let collection = PostalCodeCollectionBuilder::default().build();
47        // Missing required field (codes) triggers UninitializedFieldError converted to InvalidFormat.
48        assert!(collection.is_err());
49    }
50}