Skip to main content

ferro_events/
error.rs

1//! Error types for the event system.
2
3use thiserror::Error;
4
5/// Errors that can occur in the event system.
6#[derive(Debug, Error)]
7pub enum Error {
8    /// A listener failed to handle the event.
9    #[error("Listener '{listener}' failed: {message}")]
10    ListenerFailed {
11        /// The name of the listener that failed.
12        listener: String,
13        /// The error message.
14        message: String,
15    },
16
17    /// Failed to dispatch an event.
18    #[error("Failed to dispatch event '{event}': {message}")]
19    DispatchFailed {
20        /// The name of the event.
21        event: String,
22        /// The error message.
23        message: String,
24    },
25
26    /// A queued listener failed to serialize.
27    #[error("Failed to serialize event for queue: {0}")]
28    SerializationFailed(String),
29
30    /// A queued listener failed to deserialize.
31    #[error("Failed to deserialize event from queue: {0}")]
32    DeserializationFailed(String),
33
34    /// Queue connection failed.
35    #[error("Queue connection failed: {0}")]
36    QueueConnectionFailed(String),
37
38    /// Custom error with a message.
39    #[error("{0}")]
40    Custom(String),
41}
42
43impl Error {
44    /// Create a new listener failed error.
45    pub fn listener_failed(listener: impl Into<String>, message: impl Into<String>) -> Self {
46        Self::ListenerFailed {
47            listener: listener.into(),
48            message: message.into(),
49        }
50    }
51
52    /// Create a new dispatch failed error.
53    pub fn dispatch_failed(event: impl Into<String>, message: impl Into<String>) -> Self {
54        Self::DispatchFailed {
55            event: event.into(),
56            message: message.into(),
57        }
58    }
59
60    /// Create a custom error.
61    pub fn custom(message: impl Into<String>) -> Self {
62        Self::Custom(message.into())
63    }
64}
65
66impl From<String> for Error {
67    fn from(s: String) -> Self {
68        Self::Custom(s)
69    }
70}
71
72impl From<&str> for Error {
73    fn from(s: &str) -> Self {
74        Self::Custom(s.to_string())
75    }
76}