Currently only prints the received events, will need to port all code over to use this module instead of manipulating ExtensionState manually.
3YGYMEXVHOHRQVPC53MVPSLI2ZJM77MBPWNPDDCL56DNCPUC6XTAC use std::sync::OnceLock;use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};static EVENT_SENDER: OnceLock<UnboundedSender<Event>> = OnceLock::new();const EVENT_BATCH_LIMIT: usize = 8;#[derive(Debug)]pub enum Event {}#[tokio::main]#[tracing::instrument(skip_all)]async fn event_loop(mut receiver: UnboundedReceiver<Event>) {tracing::info!("Starting event loop");let mut event_buffer = Vec::with_capacity(EVENT_BATCH_LIMIT);loop {let events_received = receiver.recv_many(&mut event_buffer, EVENT_BATCH_LIMIT).await;if events_received == 0 {// Channel has been closed, stop event looptracing::info!("Shutting down event loop");break;};tracing::debug!(?event_buffer);event_buffer.clear();}}#[tracing::instrument]pub fn start() {let (sender, receiver) = tokio::sync::mpsc::unbounded_channel();if let Err(_existing_value) = EVENT_SENDER.set(sender) {tracing::error!("Event sender has already been initialized");}std::thread::spawn(|| event_loop(receiver));}pub fn send(event: Event) {EVENT_SENDER.get().expect("EVENT_SENDER should be set").send(event).expect("Receiver should be open");}