Available on crate feature
static only.Expand description
This code is inspired by the approach in this embedded Rust crate: embassy-executor.
Usage:
#[doc(hidden)]
fn __async_fun() -> impl Future<Output = ()> { ( move || async move {})() }
fn async_fun() {
const POOL_SIZE: usize = 4;
static POOL: TaskPoolLayout<{ TaskCapture::<_, _>::size::<POOL_SIZE>(__async_fun) }> = unsafe {
transmute(TaskCapture::<_,_>::new::<POOL_SIZE>(__async_fun))
};
const fn get<F, Args, Fut>(_: F) -> &'static TaskPool<Fut, POOL_SIZE>
where F: TaskFn<Args, Fut = Fut>, Fut: SafeFuture {
const {
assert_eq!(size_of::<TaskPool<Fut, POOL_SIZE>>(), size_of_val(&POOL));
assert!(align_of::<TaskPool<Fut, POOL_SIZE>>() <= 128);
}
unsafe { &*POOL.get().cast() }
}
get(__async_fun);
}