1use crate::types::Record;
7
8#[derive(Default)]
10pub struct BatchBuilder {
11 records: Vec<Record>,
12}
13
14impl BatchBuilder {
15 pub fn new() -> Self {
17 Self::default()
18 }
19
20 #[allow(clippy::should_implement_trait)]
22 pub fn add(mut self, record: Record) -> Self {
23 self.records.push(record);
24 self
25 }
26
27 pub fn len(&self) -> usize {
29 self.records.len()
30 }
31
32 pub fn is_empty(&self) -> bool {
34 self.records.is_empty()
35 }
36
37 pub fn build(self) -> Vec<Record> {
39 self.records
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_batch_builder_new() {
49 let builder = BatchBuilder::new();
50 assert!(builder.is_empty());
51 assert_eq!(builder.len(), 0);
52 }
53
54 #[test]
55 fn test_batch_builder_default() {
56 let builder = BatchBuilder::default();
57 assert!(builder.is_empty());
58 }
59
60 #[test]
61 fn test_batch_builder_add() {
62 let mut record = Record::new();
63 record.insert("name", "test");
64
65 let builder = BatchBuilder::new().add(record);
66 assert_eq!(builder.len(), 1);
67 assert!(!builder.is_empty());
68 }
69
70 #[test]
71 fn test_batch_builder_add_multiple() {
72 let mut record1 = Record::new();
73 record1.insert("name", "test1");
74
75 let mut record2 = Record::new();
76 record2.insert("name", "test2");
77
78 let builder = BatchBuilder::new().add(record1).add(record2);
79 assert_eq!(builder.len(), 2);
80 }
81
82 #[test]
83 fn test_batch_builder_build() {
84 let mut record = Record::new();
85 record.insert("name", "test");
86
87 let builder = BatchBuilder::new().add(record);
88 let records = builder.build();
89
90 assert_eq!(records.len(), 1);
91 }
92
93 #[test]
94 fn test_batch_builder_chaining() {
95 let records: Vec<Record> = (0..5)
96 .map(|i| {
97 let mut record = Record::new();
98 record.insert("id", i);
99 record
100 })
101 .fold(BatchBuilder::new(), |builder, record| builder.add(record))
102 .build();
103
104 assert_eq!(records.len(), 5);
105 }
106}