1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum EventBusError {
8 #[error("event publish failed for '{event_name}': {reason}")]
10 PublishFailed {
11 event_name: &'static str,
13 reason: PublishErrorReason,
15 },
16
17 #[error("handler error for '{event_name}': {message}")]
19 HandlerError {
20 event_name: String,
22 message: String,
24 },
25
26 #[error("topic not found: {0}")]
28 TopicNotFound(String),
29
30 #[error("channel closed for event '{event_name}'")]
32 ChannelClosed {
33 event_name: String,
35 },
36
37 #[error("transport error: {message}")]
39 TransportError {
40 message: String,
42 },
43
44 #[error("downcast failed for event '{event_name}'")]
46 DowncastFailed {
47 event_name: String,
49 },
50}
51
52#[derive(Debug)]
54pub enum PublishErrorReason {
55 ChannelError(String),
57 SerializationError(String),
59}
60
61impl std::fmt::Display for PublishErrorReason {
62 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
63 match self {
64 PublishErrorReason::ChannelError(s) => write!(f, "channel error: {}", s),
65 PublishErrorReason::SerializationError(s) => write!(f, "serialization error: {}", s),
66 }
67 }
68}
69
70pub type Result<T> = std::result::Result<T, EventBusError>;