use std::{fmt, future::Future, time::Instant};
pub use crate::{handle::JoinHandle, rt::Handle, rt::Runtime};
#[derive(Debug, Copy, Clone)]
pub struct JoinError;
impl fmt::Display for JoinError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "JoinError")
}
}
impl std::error::Error for JoinError {}
#[inline]
pub fn now() -> Instant {
crate::rt::Runtime::current_now()
}
#[track_caller]
pub fn spawn<F>(fut: F) -> JoinHandle<F::Output>
where
F: Future + 'static,
{
let location = std::panic::Location::caller();
let fut = crate::task::wrap(fut);
crate::rt::Runtime::with_current(|rt| unsafe { rt.spawn_at(fut, location) })
}
#[track_caller]
pub fn spawn_detached<F>(fut: F)
where
F: Future + 'static,
{
let location = std::panic::Location::caller();
let fut = crate::task::wrap(fut);
crate::rt::Runtime::with_current(|rt| unsafe { rt.spawn_detached_at(fut, location) });
}