macro_rules! static_class_method {
(
$class_name:ident {
$(
$function_js_name:literal:
$function_rust_name:ident(
$(
$function_argument_name:ident: $function_argument_type:ty,
)*
) -> $function_return_type:ty;
)*
}
) => {
impl<'env> $class_name<'env> {
$(
pub fn $function_rust_name(
env: &'env napi::Env,
$($function_argument_name: $function_argument_type),*
) -> Result<$function_return_type, napi::Error> {
let vscode_object = VscodeContext::vscode(env)?;
let constructor: ::napi::bindgen_prelude::Function<
bindgen_prelude::Unknown,
bindgen_prelude::Unknown,
> = vscode_object.get_named_property(stringify!($class_name))?;
let js_function: bindgen_prelude::Function<
bindgen_prelude::FnArgs<($($function_argument_type,)*)>,
$function_return_type,
> = constructor.get_named_property($function_js_name)?;
js_function.apply(constructor, bindgen_prelude::FnArgs::from(($($function_argument_name,)*)))
}
)*
}
};
}
pub(crate) use static_class_method;