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 match std::panic::catch_unwind(|| #input(env, exports)) {
24 Ok(r) => {
25 }
26 Err(e) => {
27 }
28 }
29
30 exports.raw()
31 }
32 })
33}