ng_gateway_driver/
modbus.rs1use crate::{NGConverter, NGDriver};
2use anyhow::anyhow;
3use async_trait::async_trait;
4use std::any::Any;
5
6#[derive(Debug, Clone)]
7pub struct ModbusDriver {}
8
9#[async_trait]
10impl NGDriver for ModbusDriver {
11 async fn initialize(&self) -> Result<(), anyhow::Error> {
12 Ok(())
13 }
14
15 async fn run(&self) -> Result<(), anyhow::Error> {
16 Err(anyhow!("Modbus driver not implemented"))
17 }
18
19 async fn execute_command(
20 &self,
21 device_id: i32,
22 command: &str,
23 params: Box<dyn Any + Send>,
24 ) -> Result<Box<dyn Any + Send>, anyhow::Error> {
25 todo!()
26 }
27
28 async fn shutdown(&self) -> Result<(), anyhow::Error> {
29 todo!()
30 }
31
32 fn converter(&self) -> Box<dyn NGConverter> {
33 todo!()
34 }
35}
36
37impl ModbusDriver {
38 pub fn new() -> Self {
39 ModbusDriver {}
40 }
41}
42
43pub struct ModbusConverter;
44
45impl NGConverter for ModbusConverter {
46 fn convert_in(&self, input: Box<dyn Any + Send>) -> Result<Box<dyn Any + Send>, anyhow::Error> {
47 if let Some(input) = input.downcast_ref::<String>() {
48 Ok(Box::new(format!("Processed Downlink: {}", input)))
49 } else if let Some(input) = input.downcast_ref::<i32>() {
50 Ok(Box::new(format!("Processed Downlink: {}", input)))
51 } else if let Some(input) = input.downcast_ref::<f64>() {
52 Ok(Box::new(format!("Processed Downlink: {:.2}", input)))
53 } else {
54 Err(anyhow!("Invalid input type"))
55 }
56 }
57
58 fn convert_out(
59 &self,
60 output: Box<dyn Any + Send>,
61 ) -> Result<Box<dyn Any + Send>, anyhow::Error> {
62 Ok(Box::new("Processed Uplink".to_string()))
63 }
64}