use iced_native::futures::{ channel::mpsc, task::{Context, Poll}, Sink, }; use std::pin::Pin; /// An event loop proxy that implements `Sink`. #[derive(Debug)] pub struct Proxy { raw: winit::event_loop::EventLoopProxy, } impl Clone for Proxy { fn clone(&self) -> Self { Self { raw: self.raw.clone(), } } } impl Proxy { /// Creates a new [`Proxy`] from an `EventLoopProxy`. /// /// [`Proxy`]: struct.Proxy.html pub fn new(raw: winit::event_loop::EventLoopProxy) -> Self { Self { raw } } } impl Sink for Proxy { type Error = mpsc::SendError; fn poll_ready( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } fn start_send( self: Pin<&mut Self>, message: Message, ) -> Result<(), Self::Error> { let _ = self.raw.send_event(message); Ok(()) } fn poll_flush( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } fn poll_close( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } }