postage/stream/
repeat.rs

1use std::pin::Pin;
2
3use crate::stream::{PollRecv, Stream};
4use crate::Context;
5
6pub struct RepeatStream<T> {
7    data: T,
8}
9
10impl<T> RepeatStream<T>
11where
12    T: Clone,
13{
14    pub fn new(data: T) -> Self {
15        Self { data }
16    }
17}
18
19impl<T> Stream for RepeatStream<T>
20where
21    T: Clone,
22{
23    type Item = T;
24
25    fn poll_recv(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> PollRecv<Self::Item> {
26        PollRecv::Ready(self.data.clone())
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use std::pin::Pin;
33
34    use crate::{
35        stream::{PollRecv, Stream},
36        Context,
37    };
38
39    use super::RepeatStream;
40
41    #[test]
42    fn test() {
43        let mut repeat = RepeatStream::new(1usize);
44        let mut cx = Context::empty();
45
46        assert_eq!(PollRecv::Ready(1), Pin::new(&mut repeat).poll_recv(&mut cx));
47        assert_eq!(PollRecv::Ready(1), Pin::new(&mut repeat).poll_recv(&mut cx));
48        assert_eq!(PollRecv::Ready(1), Pin::new(&mut repeat).poll_recv(&mut cx));
49    }
50}