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#[derive(Clone, Debug)]
30pub struct WsIoServer(Arc<WsIoServerRuntime>);
31
32impl WsIoServer {
33 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}