Skip to content

Commit 10ebbec

Browse files
committed
Add future::into_stream implementation
1 parent 06702ec commit 10ebbec

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Future
2020
- [x] future::flatten
2121
- [x] future::flatten_stream
2222
- [x] future::inspect
23-
- [ ] future::into_stream
23+
- [x] future::into_stream
2424
- [x] future::map
2525
- [x] future::map_err
2626
- [x] future::map_ok

src/future.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,19 @@ pub fn flatten_stream<Fut, St, T>(future: Fut) -> impl Stream<Item = T>
124124
})
125125
}
126126

127+
pub fn into_stream<Fut>(future: Fut) -> impl Stream<Item = Fut::Output>
128+
where Fut: Future,
129+
{
130+
futures::stream::unfold(Some(future), async move |future| {
131+
if let Some(future) = future {
132+
let item = await!(future);
133+
Some((item, (None)))
134+
} else {
135+
None
136+
}
137+
})
138+
}
139+
127140
#[cfg(test)]
128141
mod tests {
129142
use futures::executor;
@@ -241,4 +254,15 @@ mod tests {
241254
assert_eq!(list, vec![17, 18, 19]);
242255
});
243256
}
257+
258+
#[test]
259+
fn test_into_stream() {
260+
use crate::stream::collect;
261+
executor::block_on(async {
262+
let future = ready(17);
263+
let stream = into_stream(future);
264+
let collected: Vec<_> = await!(collect(stream));
265+
assert_eq!(collected, vec![17]);
266+
});
267+
}
244268
}

0 commit comments

Comments
 (0)