use futures::Future;
use napi::Env;
use napi::JsObject;
use napi::NapiValue;
use crate::spawn_local;
use crate::spawn_local_promise;
pub trait SpawnLocalExt {
fn spawn_local<F, Fut>(
&self,
callback: F,
) -> napi::Result<()>
where
F: FnOnce(Env) -> Fut + 'static,
Fut: Future<Output = napi::Result<()>> + 'static;
fn spawn_local_promise<R, F, Fut>(
&self,
callback: F,
) -> napi::Result<JsObject>
where
R: NapiValue + 'static,
F: FnOnce(Env) -> Fut + 'static,
Fut: Future<Output = napi::Result<R>> + 'static;
}
impl SpawnLocalExt for Env {
fn spawn_local<F, Fut>(
&self,
callback: F,
) -> napi::Result<()>
where
F: FnOnce(Env) -> Fut + 'static,
Fut: Future<Output = napi::Result<()>> + 'static,
{
spawn_local(self, callback)
}
fn spawn_local_promise<R, F, Fut>(
&self,
callback: F,
) -> napi::Result<JsObject>
where
R: NapiValue + 'static,
F: FnOnce(Env) -> Fut + 'static,
Fut: Future<Output = napi::Result<R>> + 'static,
{
spawn_local_promise(self, callback)
}
}