ng_gateway_driver/
modbus.rs

1use 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}