querent_synapse/callbacks/
interface.rs

1// Import necessary items from the callbacks module
2use crate::callbacks::types::event::{EventState, EventType};
3// Import necessary items from the pyo3 crate
4use pyo3::prelude::*;
5use tokio::sync::mpsc;
6
7// Define the base interface for event callbacks
8pub trait EventCallbackInterface {
9	fn handle_event(&mut self, event_type: EventType, event_data: EventState);
10}
11
12// Define a basic event handler struct
13#[derive(Clone, Debug)]
14#[pyclass]
15pub struct EventHandler {
16	event_sender: Option<mpsc::Sender<(EventType, EventState)>>,
17}
18
19impl EventHandler {
20	// Constructor for EventHandler
21	pub fn new(event_sender: Option<mpsc::Sender<(EventType, EventState)>>) -> Self {
22		EventHandler { event_sender }
23	}
24}
25
26// Define a Python-compatible event callback interface
27#[derive(Clone, Debug)]
28#[pyclass]
29pub struct PyEventCallbackInterface {
30	// Internal event handler instance
31	event_handler: EventHandler,
32}
33
34// Implement Python methods for PyEventCallbackInterface
35#[pymethods]
36impl PyEventCallbackInterface {
37	// Python constructor for PyEventCallbackInterface
38	#[new]
39	pub fn new(event_handler: EventHandler) -> Self {
40		PyEventCallbackInterface { event_handler }
41	}
42
43	// Python method to handle events
44	fn handle_event(&mut self, event_type: EventType, event_data: EventState) {
45		// Delegate the event handling to the internal event handler
46		self.event_handler.handle_event(event_type, event_data);
47	}
48}
49
50// Implement the EventCallbackInterface for the EventHandler
51impl EventCallbackInterface for EventHandler {
52	// Implementation of the handle_event method for EventHandler
53	fn handle_event(&mut self, event_type: EventType, event_data: EventState) {
54		// If the event sender is not None, send the event
55		if let Some(event_sender) = &self.event_sender {
56			// Send the event
57			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}