lighty_event/
errors.rs

1// Copyright (c) 2025 Hamadi
2// Licensed under the MIT License
3
4//! Error types for the event system
5
6use thiserror::Error;
7use tokio::sync::broadcast::error::{RecvError,TryRecvError};
8
9/// Errors that can occur when receiving events
10#[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/// Errors that can occur when trying to receive events (non-blocking)
20#[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/// Errors that can occur when sending events
33#[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
64/// Type alias for event receive operations
65pub type EventReceiveResult<T> = Result<T, EventReceiveError>;
66
67/// Type alias for event try receive operations
68pub type EventTryReceiveResult<T> = Result<T, EventTryReceiveError>;
69
70/// Type alias for event send operations
71pub type EventSendResult<T> = Result<T, EventSendError>;