update
This commit is contained in:
parent
86fdb95070
commit
ec2dab17a6
61
diff.patch
61
diff.patch
|
|
@ -1,3 +1,64 @@
|
||||||
|
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
|
diff --git a/crates/ssd/src/generators/tera.rs b/crates/ssd/src/generators/tera.rs
|
||||||
index 2cfb3eb..251a225 100644
|
index 2cfb3eb..251a225 100644
|
||||||
--- a/crates/ssd/src/generators/tera.rs
|
--- a/crates/ssd/src/generators/tera.rs
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,112 @@
|
||||||
|
fn get_attr(atts, name) {
|
||||||
|
for att in atts {
|
||||||
|
if att.name.join(".") == name {
|
||||||
|
return att;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_param(params, name) {
|
||||||
|
for param in params {
|
||||||
|
if param.name == name {
|
||||||
|
return param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
"packages:" ++ NL;
|
||||||
|
IND ++ "- name: " ++ module.name.join(".") ++ NL;
|
||||||
|
IND ++ " interfaces:" ++ NL;
|
||||||
|
|
||||||
|
for service in module.services {
|
||||||
|
IND(2) ++ "- name: " ++ service.first ++ NL;
|
||||||
|
|
||||||
|
let version = get_attr(service.second.attributes, "version");
|
||||||
|
IND(2) ++ " version:" + NL;
|
||||||
|
let major = "1";
|
||||||
|
let minor = "0";
|
||||||
|
if version != () {
|
||||||
|
major = get_param(version.parameters, "major").value.unwrap_or(major);
|
||||||
|
minor = get_param(version.parameters, "minor").value.unwrap_or(minor);
|
||||||
|
}
|
||||||
|
IND(3) ++ "major: " ++ major ++ NL;
|
||||||
|
IND(3) ++ "minor: " ++ minor ++ NL;
|
||||||
|
|
||||||
|
if service.second.functions.len() > 0 {
|
||||||
|
IND(2) ++ " methods:" ++ NL;
|
||||||
|
|
||||||
|
for function in service.second.functions {
|
||||||
|
IND(3) ++ "- name: " ++ function.first ++ NL;
|
||||||
|
|
||||||
|
if function.second.arguments.len() > 0 {
|
||||||
|
IND(3) ++ " arguments:" + NL;
|
||||||
|
for argument in function.second.arguments {
|
||||||
|
IND(4) ++ "- name: " ++ argument.first ++ NL;
|
||||||
|
IND(4) ++ " type: " ++ argument.second.typ.join("::") ++ NL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if is_some(function.second.return_type) {
|
||||||
|
let return_type = unwrap(function.second.return_type);
|
||||||
|
IND(3) ++ " return: " ++ return_type.typ.join("::");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-(to_string(service.second.events.len()));
|
||||||
|
if service.second.events.len() > 0 {
|
||||||
|
IND(2) ++ " events:" ++ NL;
|
||||||
|
for event in service.second.events {
|
||||||
|
let is_field = get_attr(event, "field") != ();
|
||||||
|
debug(is_field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
for enum in module.enums {
|
||||||
|
"enum " ++ enum.first ++ " {";
|
||||||
|
let prefix = "";
|
||||||
|
for enum_value in enum.second.values {
|
||||||
|
let name = enum_value.first;
|
||||||
|
let enum_value = enum_value.second;
|
||||||
|
if is_some(enum_value.value) {
|
||||||
|
prefix ++ NL ++ IND ++ name ++ " = " ++ unwrap(enum_value.value);
|
||||||
|
} else {
|
||||||
|
prefix ++ NL ++ IND ++ name;
|
||||||
|
}
|
||||||
|
prefix = ","
|
||||||
|
}
|
||||||
|
NL ++ "};" ++ NL(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
end("ENUMS");
|
||||||
|
|
||||||
|
-(NL);
|
||||||
|
|
||||||
|
begin("DATATYPES");
|
||||||
|
|
||||||
|
for data_type in module.data_types {
|
||||||
|
"struct " ++ data_type.first ++ " {" ++ NL;
|
||||||
|
for property in data_type.second.properties {
|
||||||
|
if property.second.is_list {
|
||||||
|
let count = property.second.count;
|
||||||
|
if is_some(count) {
|
||||||
|
let count = unwrap(count);
|
||||||
|
IND ++ property.second.typ.join("::") ++ " " ++ property.first ++ "[" ++ count ++ "];" ++ NL;
|
||||||
|
} else {
|
||||||
|
IND ++ property.second.typ.join("::") ++ " " ++ property.first ++ "[]" ++ ";" ++ NL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IND ++ property.second.typ.join("::") ++ " " ++ property.first ++ ";" ++ NL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"};" ++ NL(2);
|
||||||
|
}
|
||||||
|
end("DATATYPES");
|
||||||
|
|
||||||
|
"}" ++ NL
|
||||||
|
*/
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
data FullName {
|
||||||
|
firstname: String,
|
||||||
|
surname: String,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[list(item="FullName")]
|
||||||
|
data NameList {};
|
||||||
|
|
||||||
|
#[error]
|
||||||
|
enum ApiError {
|
||||||
|
EmptyNameError,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[version(major = "1", minor = "0")]
|
||||||
|
service Greetings {
|
||||||
|
|
||||||
|
#[throws(ApiError::EmptyNameError)]
|
||||||
|
fn GenerateGreeting(names: NameList) -> String;
|
||||||
|
|
||||||
|
event VIPGreeted(name: FullName);
|
||||||
|
#[field]
|
||||||
|
event GreetingsRequested(count: u16);
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue