AkiraPixelWind/LubanTools/Luban.ClientServer/Templates/config/rust_json/bean.tpl
2022-12-29 18:20:40 +08:00

57 lines
1.5 KiB
Smarty

{{
name = x.rust_full_name
parent_def_type = x.parent_def_type
export_fields = x.export_fields
hierarchy_export_fields = x.hierarchy_export_fields
}}
{{~if x.comment != '' ~}}
/**
* {{x.escape_comment}}
*/
{{~end~}}
{{~if !x.is_abstract_type~}}
#[allow(non_camel_case_types)]
pub struct {{name}} {
{{~for field in hierarchy_export_fields~}}
pub {{field.convention_name}}: {{rust_define_type field.ctype}},
{{~end~}}
}
impl {{name}} {
#[allow(dead_code)]
pub fn new(__js: &json::JsonValue) -> Result<{{name}}, LoadError> {
let __b = {{name}} {
{{~for field in hierarchy_export_fields~}}
{{field.convention_name}}: {{rust_json_constructor ('__js["' + field.name + '"]') field.ctype}},
{{~end~}}
};
Ok(__b)
}
}
{{~else~}}
#[allow(non_camel_case_types)]
pub enum {{name}} {
{{~for child in x.hierarchy_not_abstract_children~}}
{{child.name}}(Box<{{child.rust_full_name}}>),
{{~end~}}
}
impl {{name}} {
#[allow(dead_code)]
pub fn new(__js: &json::JsonValue) -> Result<{{name}}, LoadError> {
let __b = match __js["{{x.json_type_name_key}}"].as_str() {
Some(type_name) => match type_name {
{{~for child in x.hierarchy_not_abstract_children~}}
"{{cs_impl_data_type child x}}" => {{name}}::{{child.name}}(Box::new({{child.rust_full_name + '::new(&__js)?'}})),
{{~end~}}
_ => return Err(LoadError{})
},
None => return Err(LoadError{})
};
Ok(__b)
}
}
{{~end~}}