#[macro_use] extern crate napi_rs as napi; #[macro_use] extern crate napi_rs_derive; use napi::{CallContext, Env, Error, JsBoolean, JsString, JsUnknown, Module, Result, Status}; mod buffer; mod external; mod symbol; mod task; mod tsfn; use buffer::{buffer_to_string, get_buffer_length}; use external::{create_external, get_external_count}; use symbol::{create_named_symbol, create_symbol_from_js_string, create_unnamed_symbol}; use task::test_spawn_thread; use tsfn::{test_threadsafe_function, test_tokio_readfile, test_tsfn_error}; register_module!(test_module, init); fn init(module: &mut Module) -> Result<()> { module.create_named_method("testThrow", test_throw)?; module.create_named_method("testThrowWithReason", test_throw_with_reason)?; module.create_named_method("testSpawnThread", test_spawn_thread)?; module.create_named_method("testObjectIsDate", test_object_is_date)?; module.create_named_method("createExternal", create_external)?; module.create_named_method("getExternalCount", get_external_count)?; module.create_named_method("getBufferLength", get_buffer_length)?; module.create_named_method("bufferToString", buffer_to_string)?; module.create_named_method("createNamedSymbol", create_named_symbol)?; module.create_named_method("createUnnamedSymbol", create_unnamed_symbol)?; module.create_named_method("createSymbolFromJsString", create_symbol_from_js_string)?; module.create_named_method("testTsfnError", test_tsfn_error)?; module.create_named_method("testThreadsafeFunction", test_threadsafe_function)?; module.create_named_method("testTokioReadfile", test_tokio_readfile)?; Ok(()) } #[js_function] fn test_throw(_ctx: CallContext) -> Result { Err(Error::from_status(Status::GenericFailure)) } #[js_function(1)] fn test_throw_with_reason(ctx: CallContext) -> Result { let reason = ctx.get::(0)?; Err(Error::new( Status::GenericFailure, reason.as_str()?.to_owned(), )) } #[js_function(1)] fn test_object_is_date(ctx: CallContext) -> Result { let obj = ctx.get::(0)?; Env::get_boolean(ctx.env, obj.is_date()?) }