42 lines
970 B
Markdown
42 lines
970 B
Markdown
Load a Plugin Module as a Package
|
|
================================
|
|
|
|
{{#include ../../links.md}}
|
|
|
|
[Plugin modules] can be loaded as a package just like a normal [module].
|
|
|
|
```rust
|
|
use rhai::Engine;
|
|
use rhai::plugin::*;
|
|
|
|
// Define plugin module.
|
|
#[export_module]
|
|
mod my_module {
|
|
pub fn greet(name: &str) -> String {
|
|
format!("hello, {}!", name)
|
|
}
|
|
pub fn get_num() -> i64 {
|
|
42
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let mut engine = Engine::new();
|
|
|
|
// Create plugin module.
|
|
let module = exported_module!(my_module);
|
|
|
|
// Make the 'greet' and 'get_num' functions available to scripts.
|
|
engine.load_package(module);
|
|
}
|
|
```
|
|
|
|
|
|
Share a Package Among `Engine`s
|
|
------------------------------
|
|
|
|
Loading a [module] via `Engine::load_package` consumes the module and it cannot be used again.
|
|
|
|
If the functions are needed for multiple instances of [`Engine`], create a [custom package] from the
|
|
[plugin module], which can then be shared with `Package::get`.
|