use std::fmt::{Debug, Display};
use super::accepted::OrderAccepted;
#[derive(Clone, PartialEq, Eq)]
pub struct OrderAcceptedBatch {
pub events: Vec<OrderAccepted>,
}
impl OrderAcceptedBatch {
#[must_use]
pub fn new(events: Vec<OrderAccepted>) -> Self {
Self { events }
}
#[must_use]
pub fn len(&self) -> usize {
self.events.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.events.is_empty()
}
}
impl Debug for OrderAcceptedBatch {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct(stringify!(OrderAcceptedBatch))
.field("len", &self.events.len())
.finish()
}
}
impl Display for OrderAcceptedBatch {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}(len={})",
stringify!(OrderAcceptedBatch),
self.events.len()
)
}
}
impl IntoIterator for OrderAcceptedBatch {
type Item = OrderAccepted;
type IntoIter = std::vec::IntoIter<OrderAccepted>;
fn into_iter(self) -> Self::IntoIter {
self.events.into_iter()
}
}
#[cfg(test)]
mod tests {
use rstest::rstest;
use super::*;
#[rstest]
fn test_empty_batch() {
let batch = OrderAcceptedBatch::new(Vec::new());
assert!(batch.is_empty());
assert_eq!(batch.len(), 0);
}
#[rstest]
fn test_batch_with_events() {
let events = vec![OrderAccepted::default(), OrderAccepted::default()];
let batch = OrderAcceptedBatch::new(events);
assert!(!batch.is_empty());
assert_eq!(batch.len(), 2);
}
#[rstest]
fn test_debug_display() {
let batch = OrderAcceptedBatch::new(vec![OrderAccepted::default()]);
assert_eq!(format!("{batch}"), "OrderAcceptedBatch(len=1)");
assert_eq!(format!("{batch:?}"), "OrderAcceptedBatch { len: 1 }");
}
#[rstest]
fn test_into_iter() {
let events = vec![OrderAccepted::default(), OrderAccepted::default()];
let batch = OrderAcceptedBatch::new(events);
assert_eq!(batch.into_iter().count(), 2);
}
}