COMPATS

Static COMPATS 

Source
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()
}