1use async_trait::async_trait;
2use tokio_modbus::client::{Reader, Writer};
3
4#[async_trait]
5pub trait InputRegisterMap
8where
9 Self: Sized + Default,
10{
11 async fn update_from_input_registers(
12 &mut self,
13 client: &mut dyn Reader,
14 ) -> tokio_modbus::Result<()>;
15
16 async fn from_input_registers(client: &mut dyn Reader) -> tokio_modbus::Result<Self> {
17 let mut new = Self::default();
18 let _ = new.update_from_input_registers(client).await?;
19
20 Ok(Ok(new))
21 }
22}
23
24#[async_trait]
25pub trait HoldingRegisterMap
28where
29 Self: Sized + Default,
30{
31 async fn update_from_holding_registers(
32 &mut self,
33 client: &mut dyn Reader,
34 ) -> tokio_modbus::Result<()>;
35
36 async fn from_holding_registers(client: &mut dyn Reader) -> tokio_modbus::Result<Self> {
37 let mut new = Self::default();
38 let _ = new.update_from_holding_registers(client).await?;
39
40 Ok(Ok(new))
41 }
42
43 async fn write_to_registers(&self, client: &mut dyn Writer) -> tokio_modbus::Result<()>;
44}