#scripting-language #plugin #scripting #scripting-engine #proc-macro

macro no-std rhai_codegen

Procedural macros support package for Rhai, a scripting language and engine for Rust

23 releases (12 stable)

2.1.0 Apr 12, 2024
2.0.0 Feb 2, 2024
1.17.0 Jan 31, 2024
1.6.0 Sep 9, 2023
0.3.0 Nov 23, 2020

#990 in Embedded development

Download history 16568/week @ 2024-01-23 19214/week @ 2024-01-30 16284/week @ 2024-02-06 17497/week @ 2024-02-13 18105/week @ 2024-02-20 17315/week @ 2024-02-27 16633/week @ 2024-03-05 16859/week @ 2024-03-12 18351/week @ 2024-03-19 20844/week @ 2024-03-26 20235/week @ 2024-04-02 22233/week @ 2024-04-09 22522/week @ 2024-04-16 23224/week @ 2024-04-23 20814/week @ 2024-04-30 20501/week @ 2024-05-07

91,173 downloads per month
Used in 141 crates (2 directly)

MIT/Apache

260KB
6.5K SLoC

Procedural Macros for Plugins

Rhai logo

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

~295–750KB
~18K SLoC