Skip to main content

atomr_patterns/
error.rs

1//! Pattern-level errors.
2
3use atomr_core::actor::AskError;
4use atomr_persistence::JournalError;
5
6/// Errors raised by pattern-level operations.
7///
8/// Generic over the user's domain error `E`. Mirrors the shape of
9/// [`atomr_persistence::EventsourcedError`] so downstream code can
10/// pattern-match consistently.
11#[derive(Debug, thiserror::Error)]
12#[non_exhaustive]
13pub enum PatternError<E> {
14    #[error(transparent)]
15    Domain(E),
16
17    #[error("journal error: {0}")]
18    Journal(#[from] JournalError),
19
20    #[error("ask: {0}")]
21    Ask(#[from] AskError),
22
23    #[error("codec error: {0}")]
24    Codec(String),
25
26    #[error("invariant violation: {0}")]
27    Invariant(String),
28
29    #[error("pattern not configured: {0}")]
30    NotConfigured(&'static str),
31
32    #[error("intercepted: {0}")]
33    Intercepted(String),
34
35    #[error("concurrency conflict: expected version {expected}, actual {actual}")]
36    ConcurrencyConflict { expected: u64, actual: u64 },
37
38    #[error("reply channel dropped")]
39    ReplyDropped,
40}