57 lines
1.5 KiB
Smarty
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~}}
|