rsiot/components/cmp_websocket_server/
component.rs

1use async_trait::async_trait;
2
3use crate::{
4    executor::{CmpInOut, Component, ComponentError, IComponentProcess},
5    message::{AuthPermissions, MsgDataBound},
6};
7
8use super::{
9    config::{Config, WebsocketMessage},
10    fn_process::fn_process,
11};
12
13#[cfg_attr(not(feature = "single-thread"), async_trait)]
14#[cfg_attr(feature = "single-thread", async_trait(?Send))]
15impl<TMessage, TServerToClient, TClientToServer>
16    IComponentProcess<Config<TMessage, TServerToClient, TClientToServer>, TMessage>
17    for Component<Config<TMessage, TServerToClient, TClientToServer>, TMessage>
18where
19    TMessage: MsgDataBound + 'static,
20    TServerToClient: 'static + WebsocketMessage,
21    TClientToServer: 'static + WebsocketMessage,
22{
23    async fn process(
24        &self,
25        config: Config<TMessage, TServerToClient, TClientToServer>,
26        input: CmpInOut<TMessage>,
27    ) -> Result<(), ComponentError> {
28        fn_process(
29            input.clone_with_new_id("cmp_websocket_server", AuthPermissions::FullAccess),
30            config,
31        )
32        .await
33    }
34}
35
36/// Компонент cmp_websocker_server
37pub type Cmp<TMessage, TServerToClient, TClientToServer> =
38    Component<Config<TMessage, TServerToClient, TClientToServer>, TMessage>;