Skip to main content

rhai_sci/
lib.rs

1#![warn(clippy::all)]
2#![warn(missing_docs)]
3#![warn(clippy::missing_docs_in_private_items)]
4#![doc = include_str!("../README.md")]
5#![doc = include_str!(concat!(env!("OUT_DIR"), "/rhai-sci-docs.md"))]
6#![doc = include_str!("../docs/highlight.html")]
7
8mod patterns;
9pub use patterns::*;
10pub mod matrix;
11pub use matrix::{RhaiMatrix, RhaiVector};
12use rhai::{def_package, packages::Package, plugin::*, Engine, EvalAltResult};
13mod matrices_and_arrays;
14pub use matrices_and_arrays::matrix_functions;
15mod statistics;
16pub use statistics::stats;
17mod misc;
18pub use misc::misc_functions;
19mod cumulative;
20pub use cumulative::cum_functions;
21mod integration_and_differentiation;
22pub use integration_and_differentiation::int_and_diff;
23mod assertions;
24pub use assertions::assert_functions;
25mod constants;
26pub use constants::constant_definitions;
27mod moving;
28pub use moving::moving_functions;
29mod sets;
30pub use sets::set_functions;
31mod validate;
32pub use validate::validation_functions;
33mod trig;
34pub use trig::trig_functions;
35
36def_package! {
37    /// Package for scientific computing
38    pub SciPackage(lib) {
39
40        combine_with_exported_module!(lib, "rhai_sci_matrix_function", matrix_functions);
41        combine_with_exported_module!(lib, "rhai_sci_miscellaneous_functions", misc_functions);
42        combine_with_exported_module!(lib, "rhai_sci_basic_stats", stats);
43        combine_with_exported_module!(lib, "rhai_sci_cumulative", cum_functions);
44        combine_with_exported_module!(lib, "rhai_sci_int_and_diff", int_and_diff);
45        combine_with_exported_module!(lib, "rhai_sci_assertions", assert_functions);
46        combine_with_exported_module!(lib, "rhai_sci_constants", constant_definitions);
47        combine_with_exported_module!(lib, "rhai_sci_sets", set_functions);
48        combine_with_exported_module!(lib, "rhai_sci_moving", moving_functions);
49        combine_with_exported_module!(lib, "rhai_sci_validation", validation_functions);
50        combine_with_exported_module!(lib, "rhai_sci_trig", trig_functions);
51    }
52}
53
54/// This provides the ability to easily evaluate a line (or lines) of code without explicitly
55/// setting up a script engine
56/// ```
57/// use rhai_sci::eval;
58/// use rhai::FLOAT;
59/// print!("{:?}", eval::<FLOAT>("let x = max(5, 2); x + min(3, 72)"));
60/// ```
61pub fn eval<T: Clone + std::marker::Send + std::marker::Sync + 'static>(
62    script: &str,
63) -> Result<T, Box<EvalAltResult>> {
64    let mut engine = Engine::new();
65    engine.register_global_module(SciPackage::new().as_shared_module());
66    engine.eval::<T>(script)
67}