wsio-server 0.12.8

Event-driven WebSocket server for ws.io with namespaces and room broadcasting.
Documentation
#![cfg_attr(test, allow(clippy::expect_used, clippy::unwrap_used))]

use std::sync::Arc;

use anyhow::Result;
use serde::Serialize;
pub use wsio_core as core;

pub mod builder;
mod config;
pub mod connection;
pub mod namespace;
mod request;
pub mod request_adapters;
mod runtime;

#[cfg(feature = "tower")]
use crate::request_adapters::tower::layer::WsIoServerLayer;
use crate::{
    builder::WsIoServerBuilder,
    namespace::{
        WsIoServerNamespace,
        builder::WsIoServerNamespaceBuilder,
    },
    runtime::WsIoServerRuntime,
};

// Structs
#[derive(Clone, Debug)]
pub struct WsIoServer(Arc<WsIoServerRuntime>);

impl WsIoServer {
    // Public methods
    pub fn builder() -> WsIoServerBuilder {
        WsIoServerBuilder::new()
    }

    pub async fn close_all(&self) {
        self.0.close_all().await
    }

    #[inline]
    pub fn connection_count(&self) -> usize {
        self.0.connection_count()
    }

    pub async fn disconnect_all(&self) {
        self.0.disconnect_all().await
    }

    pub async fn emit<D: Serialize>(&self, event: impl AsRef<str>, data: Option<&D>) -> Result<()> {
        self.0.emit(event.as_ref(), data).await
    }

    #[cfg(feature = "tower")]
    pub fn layer(&self) -> WsIoServerLayer {
        WsIoServerLayer::new(self.0.clone())
    }

    #[inline]
    pub fn of(&self, path: impl AsRef<str>) -> Option<Arc<WsIoServerNamespace>> {
        self.0.get_namespace(path.as_ref())
    }

    #[inline]
    pub fn namespace_count(&self) -> usize {
        self.0.namespace_count()
    }

    #[inline]
    pub fn new_namespace_builder(&self, path: impl AsRef<str>) -> WsIoServerNamespaceBuilder {
        self.0.new_namespace_builder(path.as_ref())
    }

    pub async fn remove_namespace(&self, path: impl AsRef<str>) {
        self.0.remove_namespace(path.as_ref()).await
    }

    pub async fn shutdown(&self) {
        self.0.shutdown().await
    }
}