ferro_broadcast/
lib.rs

1//! # Ferro Broadcast
2//!
3//! WebSocket broadcasting and real-time channels for the Ferro framework.
4//!
5//! Provides a Laravel Echo-inspired broadcasting system with support for:
6//! - Public channels (anyone can subscribe)
7//! - Private channels (require authorization)
8//! - Presence channels (track online users)
9//!
10//! ## Example
11//!
12//! ```rust,ignore
13//! use ferro_broadcast::{Broadcast, Broadcaster};
14//! use std::sync::Arc;
15//!
16//! // Create a broadcaster
17//! let broadcaster = Arc::new(Broadcaster::new());
18//!
19//! // Broadcast to a channel
20//! Broadcast::new(broadcaster.clone())
21//!     .channel("orders.1")
22//!     .event("OrderUpdated")
23//!     .data(&order)
24//!     .send()
25//!     .await?;
26//! ```
27//!
28//! ## Channel Types
29//!
30//! Channels are determined by their name prefix:
31//! - `orders` - Public channel
32//! - `private-orders.1` - Private channel (requires auth)
33//! - `presence-chat.1` - Presence channel (tracks members)
34//!
35//! ## Authorization
36//!
37//! For private and presence channels, implement the `ChannelAuthorizer` trait:
38//!
39//! ```rust,ignore
40//! use ferro_broadcast::{AuthData, ChannelAuthorizer};
41//!
42//! struct MyAuthorizer;
43//!
44//! #[async_trait::async_trait]
45//! impl ChannelAuthorizer for MyAuthorizer {
46//!     async fn authorize(&self, data: &AuthData) -> bool {
47//!         // Check if user can access this channel
48//!         verify_access(&data.channel, &data.auth_token)
49//!     }
50//! }
51//! ```
52
53mod broadcast;
54mod broadcaster;
55mod channel;
56mod config;
57mod error;
58mod message;
59
60pub use broadcast::{Broadcast, BroadcastBuilder};
61pub use broadcaster::{AuthData, Broadcaster, ChannelAuthorizer, Client};
62pub use channel::{ChannelInfo, ChannelType, PresenceMember};
63pub use config::BroadcastConfig;
64pub use error::Error;
65pub use message::{BroadcastMessage, ClientMessage, ServerMessage};
66
67/// Re-export async_trait for convenience.
68pub use async_trait::async_trait;