1pub mod cable;
2pub mod channel;
3pub mod config;
4pub mod connection;
5#[cfg(feature = "cable-db")]
6pub mod db_pubsub;
7pub mod heartbeat;
8pub mod protocol;
9pub mod pubsub;
10#[cfg(feature = "cable-redis")]
11pub mod redis_pubsub;
12pub mod server;
13pub mod streams;
14
15pub use cable::Cable;
16pub use channel::{Channel, ChannelContext, ChannelName};
17pub use config::{build_configured_pubsub, CableConfig};
18pub use connection::CableConnection;
19pub use server::{handle_socket, route as cable_route, ws_handler, ChannelRegistry};
20
21pub async fn pubsub_from_config() -> doido_core::Result<std::sync::Arc<dyn PubSub>> {
30 build_configured_pubsub(&config::load()).await
31}
32#[cfg(feature = "cable-db")]
36pub use db_pubsub::DbPubSub;
37pub use doido_cable_macros::channel;
38pub use doido_cable_macros::channel as channel_macro;
39pub use protocol::{CableFrame, ServerFrame, ServerMessage};
40pub use pubsub::{MemoryPubSub, PubSub};
41#[cfg(feature = "cable-redis")]
42pub use redis_pubsub::RedisPubSub;
43
44#[macro_export]
53macro_rules! cable {
54 ($pubsub:expr, [ $($channel:expr),* $(,)? ]) => {{
55 let mut __registry = $crate::server::ChannelRegistry::new($pubsub);
56 $( __registry.register_channel($channel); )*
57 $crate::server::route(::std::sync::Arc::new(__registry))
58 }};
59 ($pubsub:expr, [ $($channel:expr),* $(,)? ], heartbeat = $heartbeat:expr) => {{
60 let mut __registry =
61 $crate::server::ChannelRegistry::new($pubsub).with_heartbeat($heartbeat);
62 $( __registry.register_channel($channel); )*
63 $crate::server::route(::std::sync::Arc::new(__registry))
64 }};
65}