combine_with_exported_module!() { /* proc-macro */ }
Expand description

Macro to combine a plugin module into an existing module.

Functions and variables in the plugin module overrides any existing similarly-named functions and variables in the target module.

This call is intended to be used within the [def_package!][crate::def_package] macro to define a custom package based on a plugin module.

All sub-modules, if any, in the plugin module are flattened and their functions/variables registered at the top level because packages require so.

The text string name in the second parameter can be anything and is reserved for future use; it is recommended to be an ID string that uniquely identifies the plugin module.

Usage

use rhai::plugin::*;

#[export_module]
mod my_plugin_module {
    pub fn foo(x: i64) -> i64 { x * 2 }
    pub fn bar() -> i64 { 21 }
}

let mut engine = Engine::new();

let mut module = Module::new();
combine_with_exported_module!(&mut module, "my_plugin_module_ID", my_plugin_module);

engine.register_global_module(module.into());

assert_eq!(engine.eval::<i64>("foo(bar())")?, 42);