116 lines
3.8 KiB
Diff
116 lines
3.8 KiB
Diff
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: std::error::Error>(e: E) -> Box<EvalAltResult> {
|
|
|
|
use rhai::Token;
|
|
|
|
+fn script_count_vec<T>(v: &Vec<T>) -> usize {
|
|
+ v.len()
|
|
+}
|
|
+
|
|
fn script_exists(path: &str) -> bool {
|
|
PathBuf::from(path).exists()
|
|
}
|
|
@@ -281,21 +285,31 @@ pub fn build_engine(messages: Rc<RefCell<Vec<String>>>, debug: bool) -> Engine {
|
|
engine.register_global_module(package.as_shared_module());
|
|
|
|
engine.register_iterator::<Vec<serde_value::Value>>();
|
|
+ engine.register_iterator::<Namespace>();
|
|
+ engine.register_type::<Namespace>();
|
|
|
|
- engine
|
|
- .register_iterator::<Vec<SsdModule>>()
|
|
- .register_iterator::<Vec<Import>>()
|
|
- .register_iterator::<OrderedMap<Namespace>>()
|
|
- .register_iterator::<Namespace>()
|
|
- .register_iterator::<OrderedMap<Enum>>()
|
|
- .register_iterator::<OrderedMap<EnumValue>>()
|
|
- .register_iterator::<OrderedMap<DataType>>()
|
|
- .register_iterator::<OrderedMap<Service>>()
|
|
- .register_iterator::<Vec<Attribute>>()
|
|
- .register_iterator::<OrderedMap<TypeName>>()
|
|
- .register_iterator::<Vec<Dependency>>()
|
|
- .register_iterator::<Vec<Parameter>>()
|
|
- .register_iterator::<OrderedMap<Function>>();
|
|
+ macro_rules! register_vec {
|
|
+ ($T: ty) => {
|
|
+ engine
|
|
+ .register_type::<Vec<$T>>()
|
|
+ .register_fn("len", Vec::<$T>::len)
|
|
+ .register_iterator::<Vec<$T>>();
|
|
+ };
|
|
+ }
|
|
+
|
|
+ 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 {
|