76 breaking releases

new 0.77.0 Apr 16, 2024
0.75.0 Apr 11, 2024
0.73.0 Mar 28, 2024
0.59.0 Dec 21, 2023
0.9.0 Nov 24, 2022

#107 in Procedural macros

Download history 129/week @ 2023-12-23 205/week @ 2023-12-30 161/week @ 2024-01-06 209/week @ 2024-01-13 173/week @ 2024-01-20 241/week @ 2024-01-27 152/week @ 2024-02-03 563/week @ 2024-02-10 397/week @ 2024-02-17 474/week @ 2024-02-24 406/week @ 2024-03-02 444/week @ 2024-03-09 253/week @ 2024-03-16 287/week @ 2024-03-23 450/week @ 2024-03-30 251/week @ 2024-04-06

1,336 downloads per month
Used in 5 crates

MIT license

4KB

napi_sym

A proc_macro for Deno's Node-API implementation. It does the following things:

  • Marks the symbol as #[no_mangle] and rewrites it as pub extern "C" $name.
  • Asserts that the function symbol is present in symbol_exports.json.
  • Maps deno_napi::Result to raw napi_result.
use deno_napi::napi_value;
use deno_napi::Env;
use deno_napi::Error;
use deno_napi::Result;

#[napi_sym::napi_sym]
fn napi_get_boolean(
  env: *mut Env,
  value: bool,
  result: *mut napi_value,
) -> Result {
  let _env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?;
  // *result = ...
  Ok(())
}

symbol_exports.json

A file containing the symbols that need to be put into the executable's dynamic symbol table at link-time.

This is done using /DEF: on Windows, -exported_symbol,_ on macOS and --export-dynamic-symbol= on Linux. See cli/build.rs.

On Windows, you need to generate the .def file by running tools/napi/generate_symbols_lists.js.

Dependencies

~0.7–1.4MB
~33K SLoC