1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//! # Ferro Events
//!
//! Event dispatcher and listener system for the Ferro framework.
//!
//! Provides a Laravel-inspired event system with support for:
//! - Synchronous listeners
//! - Asynchronous listeners
//! - Queued listeners (via `ShouldQueue` marker)
//! - Ergonomic dispatch API (`.dispatch()` on events)
//!
//! ## Example
//!
//! ```rust,ignore
//! use ferro_events::{Event, Listener, Error};
//!
//! #[derive(Clone)]
//! struct UserRegistered {
//! user_id: i64,
//! email: String,
//! }
//!
//! impl Event for UserRegistered {
//! fn name(&self) -> &'static str {
//! "UserRegistered"
//! }
//! }
//!
//! struct SendWelcomeEmail;
//!
//! #[async_trait::async_trait]
//! impl Listener<UserRegistered> for SendWelcomeEmail {
//! async fn handle(&self, event: &UserRegistered) -> Result<(), Error> {
//! println!("Sending welcome email to {}", event.email);
//! Ok(())
//! }
//! }
//!
//! // Dispatch an event (ergonomic Laravel-style API)
//! UserRegistered { user_id: 1, email: "test@example.com".into() }.dispatch().await?;
//!
//! // Or fire and forget (spawns background task)
//! UserRegistered { user_id: 1, email: "test@example.com".into() }.dispatch_sync();
//! ```
pub use ;
pub use Error;
pub use ;
/// Re-export async_trait for convenience
pub use async_trait;