1 | use super::assert_future; |
2 | use crate::future::{AbortHandle, Abortable, Aborted}; |
3 | use futures_core::future::Future; |
4 | |
5 | /// Creates a new `Abortable` future and an `AbortHandle` which can be used to stop it. |
6 | /// |
7 | /// This function is a convenient (but less flexible) alternative to calling |
8 | /// `AbortHandle::new` and `Abortable::new` manually. |
9 | /// |
10 | /// This function is only available when the `std` or `alloc` feature of this |
11 | /// library is activated, and it is activated by default. |
12 | pub fn abortable<Fut>(future: Fut) -> (Abortable<Fut>, AbortHandle) |
13 | where |
14 | Fut: Future, |
15 | { |
16 | let (handle: AbortHandle, reg: AbortRegistration) = AbortHandle::new_pair(); |
17 | let abortable: Abortable = assert_future::<Result<Fut::Output, Aborted>, _>(Abortable::new(task:future, reg)); |
18 | (abortable, handle) |
19 | } |
20 | |