1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
use napi::{CallContext, Error, JsObject, JsUndefined, Result}; use napi_derive::{js_function, module_exports}; use once_cell::sync::OnceCell; use rillrate::RillRate; static RILLRATE: OnceCell<RillRate> = OnceCell::new(); fn js_err(reason: impl ToString) -> Error { Error::from_reason(reason.to_string()) } #[module_exports] fn init(mut exports: JsObject) -> Result<()> { exports.create_named_method("install", install)?; Ok(()) } #[js_function] fn install(ctx: CallContext) -> Result<JsUndefined> { let rillrate = RillRate::from_env("js").map_err(js_err)?; RILLRATE .set(rillrate) .map_err(|_| js_err("can't install RillRate shared object"))?; ctx.env.get_undefined() }