use atomr_core::actor::AskError;
use atomr_persistence::JournalError;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum PatternError<E> {
#[error(transparent)]
Domain(E),
#[error("journal error: {0}")]
Journal(#[from] JournalError),
#[error("ask: {0}")]
Ask(#[from] AskError),
#[error("codec error: {0}")]
Codec(String),
#[error("invariant violation: {0}")]
Invariant(String),
#[error("pattern not configured: {0}")]
NotConfigured(&'static str),
#[error("intercepted: {0}")]
Intercepted(String),
#[error("concurrency conflict: expected version {expected}, actual {actual}")]
ConcurrencyConflict { expected: u64, actual: u64 },
#[error("reply channel dropped")]
ReplyDropped,
}