use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error, Serialize, Deserialize)]
pub enum CorrelatedStreamError {
#[error("Correlated data stream closed.")]
StreamClosed,
#[error("RecvError: {0}")]
RecvError(String),
#[error("SendError: {0}")]
SendError(String),
#[error("Rate limit exceeded - too many requests")]
RateLimitExceeded,
#[error("Request too large: requested {requested}, max allowed {max_allowed}")]
RequestTooLarge {
requested: usize,
max_allowed: usize,
},
#[error("Timed out acquiring config lock after {timeout_ms}ms")]
LockTimeout { timeout_ms: u64 },
#[error("Resync target {target} is behind the current position {current}")]
ResyncRewind { current: u64, target: u64 },
#[error("A resync is already in progress")]
ResyncInProgress,
#[error(
"Resync to {target} requires advancing past the generated position {generated}, but the \
generator does not support unilateral skipping (likely a generation desync)"
)]
ResyncUnsupported { generated: u64, target: u64 },
#[error(
"Skip of {requested} exceeds the {available} cached elements (would require generating)"
)]
SkipExceedsCache { available: usize, requested: usize },
}