nodex_macros/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3
4#[proc_macro]
5pub fn init(input: TokenStream) -> TokenStream {
6    init_impl(input.into())
7        .unwrap_or_else(|e| e.to_compile_error())
8        .into()
9}
10
11fn init_impl(input: proc_macro2::TokenStream) -> syn::Result<proc_macro2::TokenStream> {
12    let input: syn::Ident = syn::parse2(input)?;
13    Ok(quote! {
14        #[no_mangle]
15        pub unsafe extern "C" fn napi_register_module_v1(
16            env: nodex_api::api::napi_env,
17            exports: nodex_api::api::napi_value
18        ) -> nodex_api::api::napi_value {
19            let env = nodex_api::env::NapiEnv::from_raw(env);
20            let exports = nodex_api::value::JsValue::from_raw(env, exports);
21
22            // TODO: deal with exception
23            match std::panic::catch_unwind(|| #input(env, exports)) {
24                Ok(r) => {
25                }
26                Err(e) => {
27                }
28            }
29
30            exports.raw()
31        }
32    })
33}