102 lines
3.1 KiB
Rust
102 lines
3.1 KiB
Rust
use heromodels::db::Db;
|
|
use macros::{
|
|
register_authorized_create_by_id_fn, register_authorized_delete_by_id_fn,
|
|
register_authorized_get_by_id_fn,
|
|
};
|
|
use rhai::plugin::*;
|
|
use rhai::{Array, Dynamic, Engine, EvalAltResult, Module, INT};
|
|
use std::mem;
|
|
use std::sync::Arc;
|
|
|
|
use heromodels::db::hero::OurDB;
|
|
use heromodels::db::Collection;
|
|
use heromodels::models::flow::flow::Flow;
|
|
use heromodels::models::flow::flow_step::FlowStep;
|
|
|
|
type RhaiFlow = Flow;
|
|
type RhaiFlowStep = FlowStep;
|
|
|
|
#[export_module]
|
|
mod rhai_flow_module {
|
|
use super::{Array, Dynamic, RhaiFlow, RhaiFlowStep, INT};
|
|
|
|
#[rhai_fn(name = "new_flow", return_raw)]
|
|
pub fn new_flow(flow_uuid: String) -> Result<RhaiFlow, Box<EvalAltResult>> {
|
|
Ok(Flow::new(flow_uuid))
|
|
}
|
|
|
|
// --- Setters ---
|
|
#[rhai_fn(name = "name", return_raw)]
|
|
pub fn set_name(flow: &mut RhaiFlow, name: String) -> Result<RhaiFlow, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(flow);
|
|
*flow = owned.name(name);
|
|
Ok(flow.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "status", return_raw)]
|
|
pub fn set_status(flow: &mut RhaiFlow, status: String) -> Result<RhaiFlow, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(flow);
|
|
*flow = owned.status(status);
|
|
Ok(flow.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "add_step", return_raw)]
|
|
pub fn add_step(
|
|
flow: &mut RhaiFlow,
|
|
step: RhaiFlowStep,
|
|
) -> Result<RhaiFlow, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(flow);
|
|
*flow = owned.add_step(step);
|
|
Ok(flow.clone())
|
|
}
|
|
|
|
// --- Getters ---
|
|
#[rhai_fn(get = "id", pure)]
|
|
pub fn get_id(f: &mut RhaiFlow) -> INT {
|
|
f.base_data.id as INT
|
|
}
|
|
#[rhai_fn(get = "flow_uuid", pure)]
|
|
pub fn get_flow_uuid(f: &mut RhaiFlow) -> String {
|
|
f.flow_uuid.clone()
|
|
}
|
|
#[rhai_fn(get = "name", pure)]
|
|
pub fn get_name(f: &mut RhaiFlow) -> String {
|
|
f.name.clone()
|
|
}
|
|
#[rhai_fn(get = "status", pure)]
|
|
pub fn get_status(f: &mut RhaiFlow) -> String {
|
|
f.status.clone()
|
|
}
|
|
#[rhai_fn(get = "steps", pure)]
|
|
pub fn get_steps(f: &mut RhaiFlow) -> Array {
|
|
f.steps.clone().into_iter().map(Dynamic::from).collect()
|
|
}
|
|
}
|
|
|
|
pub fn register_flow_rhai_module(engine: &mut Engine) {
|
|
engine.build_type::<RhaiFlow>();
|
|
let mut module = exported_module!(rhai_flow_module);
|
|
|
|
register_authorized_create_by_id_fn!(
|
|
module: &mut module,
|
|
rhai_fn_name: "save_flow",
|
|
resource_type_str: "Flow",
|
|
rhai_return_rust_type: heromodels::models::flow::flow::Flow
|
|
);
|
|
register_authorized_get_by_id_fn!(
|
|
module: &mut module,
|
|
rhai_fn_name: "get_flow",
|
|
resource_type_str: "Flow",
|
|
rhai_return_rust_type: heromodels::models::flow::flow::Flow
|
|
);
|
|
register_authorized_delete_by_id_fn!(
|
|
module: &mut module,
|
|
rhai_fn_name: "delete_flow",
|
|
resource_type_str: "Flow",
|
|
rhai_return_rust_type: heromodels::models::flow::flow::Flow
|
|
);
|
|
|
|
engine.register_global_module(module.into());
|
|
println!("Successfully registered flow Rhai module.");
|
|
}
|