ghpascon_rust/devices/generic/tcp/
transport.rs1use std::sync::{Arc, Mutex};
2
3use serde_json::Value;
4
5use crate::utils::dummy_event::dummy_event;
6
7use super::types::TcpDeviceEvent;
8
9pub type EventHandler = dyn FnMut(&str, &str, Option<Value>) + Send + 'static;
10pub type SharedEventHandler = Arc<Mutex<Box<EventHandler>>>;
11
12pub fn default_event_handler() -> SharedEventHandler {
13 Arc::new(Mutex::new(Box::new(|name, event_type, event_data| {
14 dummy_event(name, event_type, event_data);
15 })))
16}
17
18pub fn event_to_wire(event: &TcpDeviceEvent) -> (&'static str, Option<Value>) {
19 match event {
20 TcpDeviceEvent::Connection(value) => ("connection", Some(Value::Bool(*value))),
21 TcpDeviceEvent::Data(value) => ("data", Some(Value::String(value.clone()))),
22 }
23}
24
25pub fn dispatch_event(handler: &SharedEventHandler, name: &str, event: &TcpDeviceEvent) {
26 let (event_type, payload) = event_to_wire(event);
27 if let Ok(mut guard) = handler.lock() {
28 (guard)(name, event_type, payload);
29 }
30}