Skip to main content

wowlab_centrifuge/
lib.rs

1//! Centrifugo WebSocket client using the bidirectional protobuf protocol.
2//!
3//! # Example
4//!
5//! ```
6//! use wowlab_centrifuge::{Client, ClientConfig};
7//! use wowlab_types::sensitive::Sensitive;
8//!
9//! let token = Sensitive::new("connection-token".to_string());
10//! let config = ClientConfig::new("https://centrifugo.example.com", token)
11//!     .name("worker")
12//!     .version("1.0.0");
13//! let client = Client::new(config);
14//!
15//! assert_eq!(format!("{client:?}"), "Client { inner: \"<ClientInner>\", shutdown: \"<CancellationToken>\" }");
16//! ```
17
18#![expect(
19    clippy::multiple_crate_versions,
20    reason = "the transport and JWT stacks currently resolve independently versioned transitive dependencies"
21)]
22
23/// Result returned by Centrifugo client operations.
24pub type Result<T> = std::result::Result<T, Error>;
25
26mod backoff;
27mod client;
28mod codes;
29mod error;
30mod filter;
31mod presence;
32mod subscription;
33mod token;
34mod transport;
35mod types;
36
37#[expect(
38    clippy::empty_structs_with_brackets,
39    clippy::struct_excessive_bools,
40    reason = "generated directly from the upstream Centrifugo protobuf schema"
41)]
42#[expect(
43    unreachable_pub,
44    reason = "Prost generates public protocol types inside this crate-private module"
45)]
46pub(crate) mod proto {
47    include!(concat!(
48        env!("OUT_DIR"),
49        "/centrifugal.centrifuge.protocol.rs"
50    ));
51}
52
53pub use backoff::Backoff;
54pub use client::{Client, ClientConfig, ClientState};
55pub use codes::{disconnect, error as error_codes, unsubscribe, ws_close};
56pub use error::Error;
57pub use filter::{FilterError, FilterValue, SubscriptionFilter};
58pub use presence::Presence;
59pub use subscription::{Subscription, SubscriptionConfig, SubscriptionState};
60pub use token::{TokenError, generate_token};
61pub use types::{
62    ClientEvent, ClientInfo, ConnectResult, HistoryResult, PresenceResult, PresenceStats,
63    Publication, RpcResult, StreamPosition, SubRefreshResult, SubscribeResult, SubscriptionEvent,
64};