use {Async, Poll}; use Future; use stream::Stream; /// Future that forwards one element from the underlying future /// (whether it is success of error) and emits EOF after that. #[derive(Debug)] pub struct IntoStream { future: Option } pub fn new(future: F) -> IntoStream { IntoStream { future: Some(future) } } impl Stream for IntoStream { type Item = F::Item; type Error = F::Error; fn poll(&mut self) -> Poll, Self::Error> { let ret = match self.future { None => return Ok(Async::Ready(None)), Some(ref mut future) => { match future.poll() { Ok(Async::NotReady) => return Ok(Async::NotReady), Err(e) => Err(e), Ok(Async::Ready(r)) => Ok(r), } } }; self.future = None; ret.map(|r| Async::Ready(Some(r))) } }