Skip to content

Commit 1869e04

Browse files
committed
Add stream::repeat implementation
1 parent 4f3073f commit 1869e04

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Stream
4646
- [x] stream::iter
4747
- [x] stream::map
4848
- [x] stream::next
49+
- [x] stream::repeat
4950
- [ ] stream::skip
5051
- [ ] stream::skip_while
5152
- [x] stream::take

src/stream.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,15 @@ pub fn take<St>(stream: St, n: u64) -> impl Stream<Item = St::Item>
135135
})
136136
}
137137

138+
pub fn repeat<T>(item: T) -> impl Stream<Item = T>
139+
where T: Clone,
140+
{
141+
use core::task::Poll;
142+
futures::stream::poll_fn(move |_| -> Poll<Option<T>> {
143+
Poll::Ready(Some(item.clone()))
144+
})
145+
}
146+
138147
#[cfg(test)]
139148
mod tests {
140149
use futures::executor;
@@ -239,4 +248,12 @@ mod tests {
239248

240249
assert_eq!(vec![1, 2, 3], executor::block_on(collect::<_, Vec<_>>(stream)));
241250
}
251+
252+
#[test]
253+
fn test_repeat() {
254+
let stream = repeat(9);
255+
let stream = take(stream, 3);
256+
257+
assert_eq!(vec![9, 9, 9], executor::block_on(collect::<_, Vec<_>>(stream)));
258+
}
242259
}

0 commit comments

Comments
 (0)