1use thiserror::Error;
7use tokio::sync::broadcast::error::{RecvError,TryRecvError};
8
9#[derive(Debug, Error, Clone)]
11pub enum EventReceiveError {
12 #[error("Event bus has been dropped - all senders closed")]
13 BusDropped,
14
15 #[error("Receiver lagged behind by {skipped} events - some events were missed")]
16 Lagged { skipped: u64 },
17}
18
19#[derive(Debug, Error, Clone)]
21pub enum EventTryReceiveError {
22 #[error("No events available in the channel")]
23 Empty,
24
25 #[error("Event bus has been dropped - all senders closed")]
26 BusDropped,
27
28 #[error("Receiver lagged behind by {skipped} events - some events were missed")]
29 Lagged { skipped: u64 },
30}
31
32#[derive(Debug, Error)]
34pub enum EventSendError {
35 #[error("No active receivers - event was not sent")]
36 NoReceivers,
37}
38
39impl From<RecvError> for EventReceiveError {
40 fn from(err: RecvError) -> Self {
41 match err {
42 RecvError::Closed => EventReceiveError::BusDropped,
43 RecvError::Lagged(skipped) => {
44 EventReceiveError::Lagged { skipped }
45 }
46 }
47 }
48}
49
50impl From<TryRecvError> for EventTryReceiveError {
51 fn from(err: TryRecvError) -> Self {
52 match err {
53 TryRecvError::Empty => EventTryReceiveError::Empty,
54 TryRecvError::Closed => {
55 EventTryReceiveError::BusDropped
56 }
57 TryRecvError::Lagged(skipped) => {
58 EventTryReceiveError::Lagged { skipped }
59 }
60 }
61 }
62}
63
64pub type EventReceiveResult<T> = Result<T, EventReceiveError>;
66
67pub type EventTryReceiveResult<T> = Result<T, EventTryReceiveError>;
69
70pub type EventSendResult<T> = Result<T, EventSendError>;