test: Add Future and Stream impl for Spawn. (#2412)

This commit is contained in:
Lucio Franco
2020-04-17 15:37:59 -04:00
committed by GitHub
parent 6f00d7158b
commit 19a87e090e
4 changed files with 27 additions and 3 deletions
+20
View File
@@ -116,6 +116,26 @@ impl<T: Stream> Spawn<T> {
}
}
impl<T: Future> Future for Spawn<T> {
type Output = T::Output;
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
// Safety: we only expose &mut T if T: Unpin therefore this is safe.
let future = unsafe { self.map_unchecked_mut(|s| &mut s.future) };
future.poll(cx)
}
}
impl<T: Stream> Stream for Spawn<T> {
type Item = T::Item;
fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
// Safety: we only expose &mut T if T: Unpin therefore this is safe.
let stream = unsafe { self.map_unchecked_mut(|s| &mut s.future) };
stream.poll_next(cx)
}
}
impl MockTask {
/// Creates new mock task
fn new() -> Self {