rspack_binding_api 0.100.0-rc.2

Rspack shared binding API
Documentation
#[macro_export]
macro_rules! define_symbols {
  (
    $(
      $(#[$meta:meta])*
      $cell:ident => $name:expr
    ),* $(,)?
  ) => {
    thread_local! {
      $(
        $(#[$meta])*
        pub(crate) static $cell: ::once_cell::unsync::OnceCell<::rspack_napi::OneShotRef> = Default::default();
      )*
    }

    pub(super) fn export_symbols(mut exports: ::napi::bindgen_prelude::Object, env: ::napi::Env) -> ::napi::Result<()> {
      use napi::bindgen_prelude::JsObjectValue;
      $(
        let symbol = ::rspack_napi::OneShotRef::new(env.raw(), env.symbol_for($name)?)?;
        exports.set_named_property(stringify!($cell), &symbol)?;
        $cell.with(|once_cell| {
          once_cell.get_or_init(move || symbol);
        });
      )*
      Ok(())
    }
  };
}