use std::{
fmt,
time::Duration,
};
use crate::BatchProcessResultBuilder;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct BatchProcessResult {
item_count: usize,
completed_count: usize,
processed_count: usize,
chunk_count: usize,
elapsed: Duration,
}
impl BatchProcessResult {
#[inline]
pub const fn builder(item_count: usize) -> BatchProcessResultBuilder {
BatchProcessResultBuilder::builder(item_count)
}
#[inline]
pub(crate) const fn new(builder: BatchProcessResultBuilder) -> Self {
Self {
item_count: builder.item_count,
completed_count: builder.completed_count,
processed_count: builder.processed_count,
chunk_count: builder.chunk_count,
elapsed: builder.elapsed,
}
}
#[inline]
pub const fn item_count(&self) -> usize {
self.item_count
}
#[inline]
pub const fn completed_count(&self) -> usize {
self.completed_count
}
#[inline]
pub const fn processed_count(&self) -> usize {
self.processed_count
}
#[inline]
pub const fn chunk_count(&self) -> usize {
self.chunk_count
}
#[inline]
pub const fn elapsed(&self) -> Duration {
self.elapsed
}
#[inline]
pub const fn is_success(&self) -> bool {
self.completed_count == self.item_count && self.processed_count == self.item_count
}
}
impl fmt::Display for BatchProcessResult {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"processed {}/{} items in {} chunks ({:?})",
self.processed_count, self.item_count, self.chunk_count, self.elapsed
)
}
}