1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use url::Url;

use rsiot_component_core::Component;
use rsiot_messages_core::IMessage;

use crate::function::function;

#[derive(Clone, Debug)]
pub struct Config<TMessage>
where
    TMessage: IMessage,
{
    /// Адрес сервера
    pub url: Url,
    /// stream_input -> передача на сервер
    pub fn_send: fn(TMessage) -> Option<String>,
    /// Данные от сервера -> stream_output
    pub fn_recv: fn(String) -> Vec<TMessage>,
}

pub fn create<TMessage>(
    config: Config<TMessage>,
) -> Box<Component<TMessage, Config<TMessage>>>
where
    TMessage: IMessage + 'static,
{
    let cmp = Component::new(config, function);
    Box::new(cmp)
}