use std::rc::Weak; use std::sync::mpsc::{SendError, Sender}; use super::runner::Execution; use crate::event_loop::EventLoopClosed; use crate::platform_impl::platform::r#async::Waker; pub struct EventLoopProxy { runner: Waker>, sender: Sender, } impl EventLoopProxy { pub fn new(runner: Waker>, sender: Sender) -> Self { Self { runner, sender } } pub fn send_event(&self, event: T) -> Result<(), EventLoopClosed> { self.sender .send(event) .map_err(|SendError(event)| EventLoopClosed(event))?; self.runner.wake(); Ok(()) } } impl Clone for EventLoopProxy { fn clone(&self) -> Self { Self { runner: self.runner.clone(), sender: self.sender.clone(), } } }