diff --git a/crates/ssd/src/generators/rhai.rs b/crates/ssd/src/generators/rhai.rs index d4ba8e3..178d4bb 100644 --- a/crates/ssd/src/generators/rhai.rs +++ b/crates/ssd/src/generators/rhai.rs @@ -45,6 +45,10 @@ fn error_to_runtime_error(e: E) -> Box { use rhai::Token; +fn script_count_vec(v: &Vec) -> usize { + v.len() +} + fn script_exists(path: &str) -> bool { PathBuf::from(path).exists() } @@ -281,21 +285,31 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { engine.register_global_module(package.as_shared_module()); engine.register_iterator::>(); + engine.register_iterator::(); + engine.register_type::(); - engine - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>() - .register_iterator::>(); + macro_rules! register_vec { + ($T: ty) => { + engine + .register_type::>() + .register_fn("len", Vec::<$T>::len) + .register_iterator::>(); + }; + } + + register_vec!(SsdModule); + register_vec!(Import); + register_vec!(Attribute); + register_vec!(Dependency); + register_vec!(Parameter); + register_vec!((String, Namespace)); + register_vec!((String, Event)); + register_vec!((String, Enum)); + register_vec!((String, EnumValue)); + register_vec!((String, DataType)); + register_vec!((String, Service)); + register_vec!((String, TypeName)); + register_vec!((String, Function)); engine.register_fn("to_string", |this: &mut Import| this.path.clone()); #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] diff --git a/crates/ssd/src/generators/tera.rs b/crates/ssd/src/generators/tera.rs index 2cfb3eb..251a225 100644 --- a/crates/ssd/src/generators/tera.rs +++ b/crates/ssd/src/generators/tera.rs @@ -1,14 +1,14 @@ -use crate::options::{BaseInputData, BaseOutputData}; -use crate::parse_raw_data; use clap::Parser; use std::collections::HashMap; use std::error::Error; use std::path::PathBuf; -use ssd::parse_file; use ssd_data::{RawModel, SsdModel}; -use crate::{print_or_write, update_types_from_file}; +use crate::helper::parse_raw_data; +use crate::helper::{print_or_write, update_types_from_file}; +use crate::options::{BaseInputData, BaseOutputData}; +use crate::parse_file; use tera::{Context, Tera}; @@ -50,4 +50,5 @@ pub fn generate( print_or_write(out.out, &result)?; Ok(()) -} \ No newline at end of file +} + diff --git a/crates/ssd/src/generators/wasm.rs b/crates/ssd/src/generators/wasm.rs index 079c93f..a0cf7bf 100644 --- a/crates/ssd/src/generators/wasm.rs +++ b/crates/ssd/src/generators/wasm.rs @@ -1,14 +1,14 @@ -use crate::options::{BaseInputData, BaseOutputData}; -use crate::parse_raw_data; use clap::Parser; use extism::{convert::Json, Manifest, PluginBuilder, Wasm}; use std::collections::HashMap; use std::path::PathBuf; -use ssd::parse_file; use ssd_data::{RawModel, SsdModel}; -use crate::{print_or_write, update_types_from_file}; +use crate::helper::parse_raw_data; +use crate::helper::{print_or_write, update_types_from_file}; +use crate::options::{BaseInputData, BaseOutputData}; +use crate::parse_file; #[derive(Debug, Parser)] pub struct Parameters {