Skip to main content

rsiot/components_config/master_device/
device_trait.rs

1use std::fmt::Debug;
2
3use async_trait::async_trait;
4use tokio::sync::mpsc;
5
6use crate::{
7    executor::MsgBusInput,
8    message::{Message, MsgDataBound},
9};
10
11use super::RequestResponseBound;
12
13/// Трейт для реализации на структурах обмена данными с подчиненными устройствами
14#[async_trait]
15pub trait DeviceTrait<TMsg, TRequest, TResponse>
16where
17    Self: Debug + Send + Sync,
18    TMsg: MsgDataBound + 'static,
19    TRequest: 'static + RequestResponseBound,
20    TResponse: 'static + RequestResponseBound,
21{
22    /// Запустить опрос
23    async fn spawn(
24        self: Box<Self>,
25        ch_rx_msgbus_to_device: MsgBusInput<TMsg>,
26        ch_tx_device_to_addindex: mpsc::Sender<TRequest>,
27        ch_rx_fieldbus_to_split: mpsc::Receiver<TResponse>,
28        ch_tx_device_to_msgbus: mpsc::Sender<Message<TMsg>>,
29    ) -> super::Result<()>;
30}