nautilus_model/events/order/
submitted_batch.rs1use std::fmt::{Debug, Display};
17
18use super::submitted::OrderSubmitted;
19
20#[derive(Clone, PartialEq, Eq)]
24pub struct OrderSubmittedBatch {
25 pub events: Vec<OrderSubmitted>,
26}
27
28impl OrderSubmittedBatch {
29 #[must_use]
31 pub fn new(events: Vec<OrderSubmitted>) -> Self {
32 Self { events }
33 }
34
35 #[must_use]
37 pub fn len(&self) -> usize {
38 self.events.len()
39 }
40
41 #[must_use]
43 pub fn is_empty(&self) -> bool {
44 self.events.is_empty()
45 }
46}
47
48impl Debug for OrderSubmittedBatch {
49 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
50 f.debug_struct(stringify!(OrderSubmittedBatch))
51 .field("len", &self.events.len())
52 .finish()
53 }
54}
55
56impl Display for OrderSubmittedBatch {
57 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
58 write!(
59 f,
60 "{}(len={})",
61 stringify!(OrderSubmittedBatch),
62 self.events.len()
63 )
64 }
65}
66
67impl IntoIterator for OrderSubmittedBatch {
68 type Item = OrderSubmitted;
69 type IntoIter = std::vec::IntoIter<OrderSubmitted>;
70
71 fn into_iter(self) -> Self::IntoIter {
72 self.events.into_iter()
73 }
74}
75
76#[cfg(test)]
77mod tests {
78 use rstest::rstest;
79
80 use super::*;
81
82 #[rstest]
83 fn test_empty_batch() {
84 let batch = OrderSubmittedBatch::new(Vec::new());
85 assert!(batch.is_empty());
86 assert_eq!(batch.len(), 0);
87 }
88
89 #[rstest]
90 fn test_batch_with_events() {
91 let events = vec![OrderSubmitted::default(), OrderSubmitted::default()];
92 let batch = OrderSubmittedBatch::new(events);
93 assert!(!batch.is_empty());
94 assert_eq!(batch.len(), 2);
95 }
96
97 #[rstest]
98 fn test_debug_display() {
99 let batch = OrderSubmittedBatch::new(vec![OrderSubmitted::default()]);
100 assert_eq!(format!("{batch}"), "OrderSubmittedBatch(len=1)");
101 assert_eq!(format!("{batch:?}"), "OrderSubmittedBatch { len: 1 }");
102 }
103
104 #[rstest]
105 fn test_into_iter() {
106 let events = vec![OrderSubmitted::default(), OrderSubmitted::default()];
107 let batch = OrderSubmittedBatch::new(events);
108 assert_eq!(batch.into_iter().count(), 2);
109 }
110}