Struct moon_script::engine::Engine
source · pub struct Engine { /* private fields */ }Expand description
Scripting engine, it allows to create runnable ASTs, and also to give functions and constant values for said scripts
Implementations§
source§impl Engine
impl Engine
sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new empty Engine containing just basic functions, like println or binary operators
sourcepub fn add_constant<Name: ToString, Value: Into<Constant>>(
&mut self,
name: Name,
value: Value,
) -> Option<Constant>
pub fn add_constant<Name: ToString, Value: Into<Constant>>( &mut self, name: Name, value: Value, ) -> Option<Constant>
Adds a constant with a value
use moon_script::{ContextBuilder, Engine};
let mut engine = Engine::new();
engine.add_constant("MY_CONSTANT", 15);
let runnable_ast = engine.parse(r###"
return MY_CONSTANT;
"###, ContextBuilder::default()).unwrap();
let result : i32 = runnable_ast.executor().execute().unwrap().try_into().unwrap();
assert_eq!(15, result);sourcepub fn add_function<Function: Into<FunctionDefinition>>(
&mut self,
function_definition: Function,
)
pub fn add_function<Function: Into<FunctionDefinition>>( &mut self, function_definition: Function, )
Adds a function with a name
use moon_script::{ContextBuilder, Engine, FunctionDefinition};
let mut engine = Engine::new();
engine.add_function(FunctionDefinition::new("say_hi_and_return_number", ||{
println!("Hi!");
return 5;
}));
let runnable_ast = engine.parse(r###"
return say_hi_and_return_number();
"###, ContextBuilder::default()).unwrap();
let result : i32 = runnable_ast.executor().execute().unwrap().try_into().unwrap();
assert_eq!(5, result);sourcepub fn parse<'input>(
&self,
input: &'input str,
context_builder: ContextBuilder,
) -> Result<AST, ParsingError<'input>>
pub fn parse<'input>( &self, input: &'input str, context_builder: ContextBuilder, ) -> Result<AST, ParsingError<'input>>
Parses a script into an AST using a specific context
Adds a function with a name
use moon_script::{InputVariable, ContextBuilder, Engine, FunctionDefinition};
let mut engine = Engine::new();
engine.add_function(FunctionDefinition::new("add_five", |num:u8| {
return num + 5;
}));
let context = ContextBuilder::new()
.with_variable(InputVariable::new("ten").value(10));
let runnable_ast = engine.parse(r###"
return add_five(ten);
"###, context).unwrap();
let result : i32 = runnable_ast.executor().execute().unwrap().try_into().unwrap();
assert_eq!(15, result);Trait Implementations§
Auto Trait Implementations§
impl Freeze for Engine
impl !RefUnwindSafe for Engine
impl Send for Engine
impl Sync for Engine
impl Unpin for Engine
impl !UnwindSafe for Engine
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit)