use thiserror::Error;
use super::BatchProcessResult;
#[derive(Debug, Clone, Error, PartialEq, Eq)]
pub enum ChunkedBatchProcessError<E> {
#[error("batch item count shortfall: expected {expected}, actual {actual}")]
CountShortfall {
expected: usize,
actual: usize,
result: BatchProcessResult,
},
#[error(
"batch item count exceeded: expected {expected}, observed at least {observed_at_least}"
)]
CountExceeded {
expected: usize,
observed_at_least: usize,
result: BatchProcessResult,
},
#[error("batch chunk {chunk_index} failed at item {start_index} with {chunk_len} items")]
ChunkFailed {
chunk_index: usize,
start_index: usize,
chunk_len: usize,
source: E,
result: BatchProcessResult,
},
#[error(
"batch chunk {chunk_index} returned invalid result at item {start_index}: expected {chunk_len} completed items, got item_count {item_count}, completed_count {completed_count}"
)]
InvalidChunkResult {
chunk_index: usize,
start_index: usize,
chunk_len: usize,
item_count: usize,
completed_count: usize,
result: BatchProcessResult,
},
}
impl<E> ChunkedBatchProcessError<E> {
#[inline]
pub const fn result(&self) -> &BatchProcessResult {
match self {
Self::CountShortfall { result, .. }
| Self::CountExceeded { result, .. }
| Self::ChunkFailed { result, .. }
| Self::InvalidChunkResult { result, .. } => result,
}
}
#[inline]
pub fn into_result(self) -> BatchProcessResult {
match self {
Self::CountShortfall { result, .. }
| Self::CountExceeded { result, .. }
| Self::ChunkFailed { result, .. }
| Self::InvalidChunkResult { result, .. } => result,
}
}
}