macro_rules! namespace_function {
(
$namespace:literal {
$(
$function_js_name:literal: $function_rust_name:ident(
$(
$argument_name:ident: $argument_type:ty,
)*
) -> $return_type:ty;
)*
}
) => {
$(
pub fn $function_rust_name<'env>(
env: &napi::Env,
$($argument_name: $argument_type),*
) -> Result<$return_type, napi::Error> {
let vscode_object = super::VscodeContext::vscode(env)?;
let namespace: bindgen_prelude::Object = vscode_object.get_named_property($namespace)?;
let function_prototype: bindgen_prelude::Function<
bindgen_prelude::FnArgs<($($argument_type,)*)>,
$return_type,
> = namespace.get_named_property($function_js_name)?;
function_prototype.apply(
namespace,
bindgen_prelude::FnArgs::from(($($argument_name,)*)),
)
}
)*
};
}
pub(crate) use namespace_function;