use std::task::Poll; use futures_core::Stream; use futures_lite::prelude::*; use lending_stream::prelude::*; #[pin_project::pin_project] struct Hello(String); impl Stream for Hello { type Item = String; fn poll_next( self: std::pin::Pin<&mut Self>, _cx: &mut std::task::Context<'_>, ) -> std::task::Poll> { let this = self.project(); Poll::Ready(Some(this.0.clone())) } } fn main() { futures_lite::future::block_on(async { let mut hello = Hello(String::from("hi hi hi")); let _value: String = hello.next().await.unwrap(); let (_x, _y): (&mut Hello, String) = hello.lend_mut().next().await.unwrap(); }) }