Create macro for defining `ThreadsafeFunction`s

finchie
Dec 22, 2025, 5:09 AM
TDTLSDFGULJHKRAYASY4NMCRPY6CFK4KFGTHKB6AHZWMWPCULHQAC

Dependencies

  • [2] WFWTKCJN Create initial Visual Studio Code extension
  • [3] 3YGYMEXV Create `event_loop` module

Change contents

  • file addition: threadsafe_function.rs (----------)
    [2.54375]
    use super::macros::threadsafe_function;
  • edit in extensions/vscode/src/vscode_sys/mod.rs at line 23
    [2.59019]
    [2.59019]
    pub mod threadsafe_function;
  • file addition: threadsafe_function.rs (----------)
    [2.67463]
    macro_rules! threadsafe_function {
    (
    $js_namespace_name:literal: $module_name:ident {
    $(
    $function_js_name:literal: $function_module_name:ident(
    $(
    $argument_type:ty
    ),+
    ) -> $return_type:ty;
    )*
    }
    ) => {
    pub mod $module_name {
    $(
    pub mod $function_module_name {
    use napi::bindgen_prelude::JsObjectValue;
    pub type Arguments = napi::bindgen_prelude::FnArgs<($($argument_type,)*)>;
    pub type Return = $return_type;
    pub type Prototype = napi::threadsafe_function::ThreadsafeFunction<
    Arguments,
    Return,
    Arguments,
    napi::Status,
    false,
    false,
    0,
    >;
    pub fn get(env: &napi::Env) -> Result<Prototype, napi::Error> {
    let vscode_object = crate::vscode_sys::VscodeContext::vscode(env)?;
    let namespace: napi::bindgen_prelude::Object = vscode_object.get_named_property($js_namespace_name)?;
    namespace.get_named_property($function_js_name)
    }
    }
    )*
    }
    };
    }
    pub(crate) use threadsafe_function;
  • edit in extensions/vscode/src/vscode_sys/macros/mod.rs at line 8
    [2.77446]
    [2.77446]
    mod threadsafe_function;
  • edit in extensions/vscode/src/vscode_sys/macros/mod.rs at line 27
    [2.78141]
    pub(super) use threadsafe_function::threadsafe_function;
  • edit in extensions/vscode/src/event_loop/mod.rs at line 4
    [3.259]
    [3.259]
    mod threadsafe_functions;