rsiot/components_config/master_device/
device_trait.rs1use 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#[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 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}