use std::future::Future;
use std::io::Result;
use std::marker::PhantomData;
#[inline(always)]
pub fn spawn_local<F>(f: F)
where
F: Future<Output = ()> + 'static,
{
crate::imp::spawn_local(f);
}
#[derive(Debug)]
pub struct RuntimeBuilder {
worker_threads: usize,
}
impl Default for RuntimeBuilder {
fn default() -> Self {
Self {
worker_threads: crate::imp::get_default_runtime_size(),
}
}
}
impl RuntimeBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn worker_threads(&mut self, val: usize) -> &mut Self {
self.worker_threads = val;
self
}
pub fn build(&mut self) -> Result<Runtime> {
Ok(Runtime {
inner: crate::imp::Runtime::new(self.worker_threads)?,
})
}
}
#[derive(Debug, Clone, Default)]
pub struct Runtime {
inner: crate::imp::Runtime,
}
impl Runtime {
pub fn builder() -> RuntimeBuilder {
RuntimeBuilder::new()
}
#[inline(always)]
pub fn spawn_pinned<F, Fut>(&self, create_task: F)
where
F: FnOnce() -> Fut,
F: Send + 'static,
Fut: Future<Output = ()> + 'static,
{
self.inner.spawn_pinned(create_task);
}
}
#[derive(Debug, Clone)]
pub struct LocalHandle {
inner: crate::imp::LocalHandle,
_marker: PhantomData<*const ()>,
}
impl LocalHandle {
pub fn current() -> Self {
let inner = crate::imp::LocalHandle::current();
Self {
inner,
_marker: PhantomData,
}
}
pub fn try_current() -> Option<Self> {
let inner = crate::imp::LocalHandle::try_current()?;
Some(Self {
inner,
_marker: PhantomData,
})
}
#[inline(always)]
pub fn spawn_local<F>(&self, f: F)
where
F: Future<Output = ()> + 'static,
{
self.inner.spawn_local(f);
}
}