pub static COMPATS: DistributedSlice<[Compat]>
Available on crate feature
compat
only.Expand description
DistributedSlice to collect Compats from distributed_slice.
Here are examples for tokio
and smol
, see linkme for details.
use spawns_core as spawns;
use linkme::distributed_slice;
use spawns::{Compat, Task, COMPATS};
#[distributed_slice(COMPATS)]
static TOKIO: Compat = Compat::Local(tokio_local);
fn tokio_spawn(task: Task) {
let Task { future, .. } = task;
let handle = tokio::runtime::Handle::current();
handle.spawn(Box::into_pin(future));
}
fn tokio_local() -> Option<fn(Task)> {
tokio::runtime::Handle::try_current()
.ok()
.map(|_| tokio_spawn as fn(Task))
}
#[distributed_slice(COMPATS)]
static SMOL: Compat = Compat::NamedGlobal {
name: "smol",
spawn: smol_global,
};
fn smol_global(task: Task) {
let Task { future, .. } = task;
smol::spawn(Box::into_pin(future)).detach()
}