Crate rhai_codegen[−][src]
Expand description
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);
Register a Rust Function with a Rhai Module
use rhai::{EvalAltResult, FLOAT, Module}; use rhai::plugin::*; use rhai::module_resolvers::*; #[export_fn] fn distance_function(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(); engine.register_fn("get_mystic_number", || 42.0 as FLOAT); let mut m = Module::new(); set_exported_fn!(m, "euclidean_distance", distance_function); 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, get_mystic_number()) "#)?, 41.0);
Register a Plugin Function with an Engine
use rhai::{EvalAltResult, FLOAT, Module}; use rhai::plugin::*; use rhai::module_resolvers::*; #[export_fn] pub fn distance_function(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(); engine.register_fn("get_mystic_number", || { 42 as FLOAT }); register_exported_fn!(engine, "euclidean_distance", distance_function); assert_eq!(engine.eval::<FLOAT>( "euclidean_distance(0.0, 1.0, 0.0, get_mystic_number())" )?, 41.0);
Macros
combine_with_exported_module | Macro to combine a plugin module into an existing module. |
exported_module | Macro to generate a Rhai |
register_exported_fn | Macro to register a plugin function (defined via [ |
set_exported_fn | Macro to register a plugin function into a Rhai |
set_exported_global_fn | Macro to register a plugin function into a Rhai |
Attribute Macros
export_fn | Attribute, when put on a Rust function, turns it into a plugin function. |
export_module | Attribute, when put on a Rust module, turns it into a plugin module. |