1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum ProcessingError {
6 #[error("retryable error: {0}")]
8 Retryable(#[source] anyhow::Error),
9 #[error("non-retryable error: {0}")]
11 NonRetryable(#[source] anyhow::Error),
12}
13
14pub type HandlerError = ProcessingError;
15pub type PublisherError = ProcessingError;
16
17#[derive(Error, Debug)]
19pub enum ConsumerError {
20 #[error("consumer connection error: {0}")]
22 Connection(#[source] anyhow::Error),
23
24 #[error("consumer gap: requested offset {requested} but earliest available is {base}")]
26 Gap { requested: u64, base: u64 },
27
28 #[error("consumer reached end of stream")]
30 EndOfStream,
31}
32
33impl From<anyhow::Error> for ConsumerError {
34 fn from(err: anyhow::Error) -> Self {
35 ConsumerError::Connection(err)
37 }
38}
39
40impl From<anyhow::Error> for ProcessingError {
41 fn from(err: anyhow::Error) -> Self {
42 ProcessingError::Retryable(err)
45 }
46}