querent_synapse/callbacks/
interface.rs1use crate::callbacks::types::event::{EventState, EventType};
3use pyo3::prelude::*;
5use tokio::sync::mpsc;
6
7pub trait EventCallbackInterface {
9 fn handle_event(&mut self, event_type: EventType, event_data: EventState);
10}
11
12#[derive(Clone, Debug)]
14#[pyclass]
15pub struct EventHandler {
16 event_sender: Option<mpsc::Sender<(EventType, EventState)>>,
17}
18
19impl EventHandler {
20 pub fn new(event_sender: Option<mpsc::Sender<(EventType, EventState)>>) -> Self {
22 EventHandler { event_sender }
23 }
24}
25
26#[derive(Clone, Debug)]
28#[pyclass]
29pub struct PyEventCallbackInterface {
30 event_handler: EventHandler,
32}
33
34#[pymethods]
36impl PyEventCallbackInterface {
37 #[new]
39 pub fn new(event_handler: EventHandler) -> Self {
40 PyEventCallbackInterface { event_handler }
41 }
42
43 fn handle_event(&mut self, event_type: EventType, event_data: EventState) {
45 self.event_handler.handle_event(event_type, event_data);
47 }
48}
49
50impl EventCallbackInterface for EventHandler {
52 fn handle_event(&mut self, event_type: EventType, event_data: EventState) {
54 if let Some(event_sender) = &self.event_sender {
56 event_sender.try_send((event_type, event_data)).unwrap_or_else(|e| {
58 println!("Error sending event: {:?}", e);
59 });
60 } else {
61 println!("Event sender is None");
62 println!("Event type: {:?}", event_type);
63 println!("Event data: {:?}", event_data);
64 }
65 }
66}