Skip to main content

wsio_server/
lib.rs

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