use futures::FutureExt as _;
use crate::error;
use crate::tasks::TaskHandle;
pub(crate) fn spawn<F>(future: F) -> TaskHandle<F::Output>
where
F: Future + Send + 'static,
F::Output: Send + 'static,
{
TaskHandle::from_future(
tokio::spawn(future)
.map(|r| r.map_err(|err| error::ErrorKind::TaskError(Box::new(err)).into())),
)
}
pub(crate) fn spawn_blocking<F>(future: F) -> impl Future<Output = TaskHandle<F::Output>>
where
F: Future + Send + 'static,
F::Output: Send + Sync + 'static,
{
spawn(future).map(|result| TaskHandle::from_future(std::future::ready(result)))
}