24 releases (13 stable)
2.2.0 | Jul 4, 2024 |
---|---|
2.0.0 | Feb 2, 2024 |
1.17.0 |
|
1.6.0 | Sep 9, 2023 |
0.3.0 | Nov 23, 2020 |
#952 in Embedded development
148,856 downloads per month
Used in 194 crates
(2 directly)
260KB
6.5K
SLoC
Procedural Macros for Plugins
This crate holds procedural macros for code generation, supporting the plugins system for Rhai.
This crate is automatically referenced by the Rhai crate. Normally it should not be used directly.
lib.rs
:
This crate contains procedural macros to make creating Rhai plugin modules much easier.
Export an Entire Rust Module to a Rhai Module
use rhai::{EvalAltResult, FLOAT};
use rhai::plugin::*;
use rhai::module_resolvers::*;
#[export_module]
mod advanced_math {
pub const MYSTIC_NUMBER: FLOAT = 42.0;
pub fn euclidean_distance(x1: FLOAT, y1: FLOAT, x2: FLOAT, y2: FLOAT) -> FLOAT {
((y2 - y1).abs().powf(2.0) + (x2 -x1).abs().powf(2.0)).sqrt()
}
}
let mut engine = Engine::new();
let m = exported_module!(advanced_math);
let mut r = StaticModuleResolver::new();
r.insert("Math::Advanced", m);
engine.set_module_resolver(r);
assert_eq!(engine.eval::<FLOAT>(
r#"
import "Math::Advanced" as math;
math::euclidean_distance(0.0, 1.0, 0.0, math::MYSTIC_NUMBER)
"#)?, 41.0);
Dependencies
~210–650KB
~15K SLoC