#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::future::Future; use std::pin::Pin; use std::sync::{Arc, Mutex}; use std::task::{Context, Poll, Waker}; struct Waiter { shared: Arc>, } struct Shared { waker: Waker, } impl Future for Waiter { type Output = (); fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<()> { let mut shared = self.shared.lock().unwrap(); shared.waker.clone_from(cx.waker()); Poll::Ready(()) } } fn main() {}