wsio_server/
lib.rs

1use std::sync::Arc;
2
3use anyhow::Result;
4use serde::Serialize;
5pub use wsio_core as core;
6
7mod builder;
8mod config;
9pub mod connection;
10pub mod namespace;
11mod request;
12mod request_adapters;
13mod runtime;
14
15#[cfg(feature = "tower")]
16use crate::request_adapters::tower::layer::WsIoServerLayer;
17use crate::{
18    builder::WsIoServerBuilder,
19    namespace::{
20        WsIoServerNamespace,
21        builder::WsIoServerNamespaceBuilder,
22    },
23    runtime::WsIoServerRuntime,
24};
25
26// Structs
27#[derive(Clone)]
28pub struct WsIoServer(Arc<WsIoServerRuntime>);
29
30impl WsIoServer {
31    // Public methods
32    pub fn builder() -> WsIoServerBuilder {
33        WsIoServerBuilder::new()
34    }
35
36    #[inline]
37    pub fn connection_count(&self) -> usize {
38        self.0.connection_count()
39    }
40
41    pub async fn emit<D: Serialize>(&self, event: impl AsRef<str>, data: Option<&D>) -> Result<()> {
42        self.0.emit(event.as_ref(), data).await
43    }
44
45    #[cfg(feature = "tower")]
46    pub fn layer(&self) -> WsIoServerLayer {
47        WsIoServerLayer::new(self.0.clone())
48    }
49
50    #[inline]
51    pub fn of(&self, path: impl AsRef<str>) -> Option<Arc<WsIoServerNamespace>> {
52        self.0.get_namespace(path.as_ref())
53    }
54
55    #[inline]
56    pub fn namespace_count(&self) -> usize {
57        self.0.namespace_count()
58    }
59
60    #[inline]
61    pub fn new_namespace_builder(&self, path: impl AsRef<str>) -> Result<WsIoServerNamespaceBuilder> {
62        self.0.new_namespace_builder(path.as_ref())
63    }
64
65    pub async fn remove_namespace(&self, path: impl AsRef<str>) {
66        self.0.remove_namespace(path.as_ref()).await
67    }
68
69    pub async fn shutdown(&self) {
70        self.0.shutdown().await
71    }
72}