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}