broker_tokio/stream/
once.rs1use crate::stream::{self, Iter, Stream};
2
3use core::option;
4use core::pin::Pin;
5use core::task::{Context, Poll};
6
7#[derive(Debug)]
9#[must_use = "streams do nothing unless polled"]
10pub struct Once<T> {
11 iter: Iter<option::IntoIter<T>>,
12}
13
14impl<I> Unpin for Once<I> {}
15
16pub fn once<T>(value: T) -> Once<T> {
37 Once {
38 iter: stream::iter(Some(value).into_iter()),
39 }
40}
41
42impl<T> Stream for Once<T> {
43 type Item = T;
44
45 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<T>> {
46 Pin::new(&mut self.iter).poll_next(cx)
47 }
48
49 fn size_hint(&self) -> (usize, Option<usize>) {
50 self.iter.size_hint()
51 }
52}