99 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Smarty
		
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Smarty
		
	
	
	
|  | {{  | ||
|  |     name = x.rust_full_name
 | ||
|  |     key_type = x.key_ttype
 | ||
|  |     value_type =  x.value_ttype
 | ||
|  | }}
 | ||
|  | {{~if x.comment != '' ~}}
 | ||
|  | /**
 | ||
|  |  * {{x.escape_comment}}
 | ||
|  |  */
 | ||
|  | {{~end~}}
 | ||
|  | #[allow(non_camel_case_types)]
 | ||
|  | pub struct {{name}} { | ||
|  |     {{~if x.is_map_table ~}}
 | ||
|  |     data_list: Vec<std::rc::Rc<{{rust_define_type value_type}}>>,
 | ||
|  |     data_map: std::collections::HashMap<{{rust_define_type key_type}}, std::rc::Rc<{{rust_define_type value_type}}>>,
 | ||
|  |     {{~else if x.is_list_table ~}}
 | ||
|  |     data_list: Vec<std::rc::Rc<{{rust_define_type value_type}}>>,
 | ||
|  |     {{~else~}}
 | ||
|  |     data: {{rust_class_name value_type}},
 | ||
|  |     {{~end~}}
 | ||
|  | }
 | ||
|  | 
 | ||
|  | impl {{name}}{ | ||
|  |     pub fn new(__js: &json::JsonValue) -> Result<{{name}}, LoadError> { | ||
|  |     {{~if x.is_map_table ~}}
 | ||
|  |         if !__js.is_array() { | ||
|  |             return Err(LoadError{});
 | ||
|  |         }
 | ||
|  |         let mut t = {{name}} { | ||
|  |             data_list : Vec::new(),
 | ||
|  |             data_map: std::collections::HashMap::new(),
 | ||
|  |         };
 | ||
|  |         
 | ||
|  |         for __e in __js.members() { | ||
|  |             let __v = std::rc::Rc::new(match {{rust_class_name value_type}}::new(__e) { | ||
|  |                 Ok(x) => x,
 | ||
|  |                 Err(err) => return Err(err),
 | ||
|  |             });
 | ||
|  |             let __v2 = std::rc::Rc::clone(&__v);
 | ||
|  |             t.data_list.push(__v);
 | ||
|  | {{~if !value_type.bean.is_abstract_type~}}
 | ||
|  |             t.data_map.insert(__v2.{{x.index_field.convention_name}}.clone(), __v2);
 | ||
|  | {{~else~}}
 | ||
|  |             match &*__v2 { | ||
|  |     {{~for child in value_type.bean.hierarchy_not_abstract_children~}}
 | ||
|  |                 {{rust_class_name value_type}}::{{child.name}}(__w__) => t.data_map.insert(__w__.{{x.index_field.convention_name}}.clone(), __v2),
 | ||
|  |     {{~end~}}
 | ||
|  |             };
 | ||
|  | {{~end~}}
 | ||
|  |         }
 | ||
|  |         Ok(t)
 | ||
|  |     }
 | ||
|  |     #[allow(dead_code)]
 | ||
|  |     pub fn get_data_map(self:&{{name}}) -> &std::collections::HashMap<{{rust_define_type key_type}}, std::rc::Rc<{{rust_define_type value_type}}>> { &self.data_map }
 | ||
|  |     #[allow(dead_code)]
 | ||
|  |     pub fn get_data_list(self:&{{name}}) -> &Vec<std::rc::Rc<{{rust_define_type value_type}}>> { &self.data_list }
 | ||
|  |     #[allow(dead_code)]
 | ||
|  |     pub fn get(self:&{{name}}, key: &{{rust_define_type key_type}}) -> std::option::Option<&std::rc::Rc<{{rust_define_type value_type}}>> { self.data_map.get(key) }
 | ||
|  |     
 | ||
|  |     {{~else if x.is_list_table ~}}
 | ||
|  |         if !__js.is_array() { | ||
|  |             return Err(LoadError{});
 | ||
|  |         }
 | ||
|  |         let mut t = {{name}} { | ||
|  |             data_list : Vec::new(),
 | ||
|  |         };
 | ||
|  |         
 | ||
|  |         for __e in __js.members() { | ||
|  |             let __v = std::rc::Rc::new(match {{rust_class_name value_type}}::new(__e) { | ||
|  |                 Ok(x) => x,
 | ||
|  |                 Err(err) => return Err(err),
 | ||
|  |             });
 | ||
|  |             let __v2 = std::rc::Rc::clone(&__v);
 | ||
|  |             t.data_list.push(__v);
 | ||
|  |         }
 | ||
|  |         Ok(t)
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     #[allow(dead_code)]
 | ||
|  |     pub fn get_data_list(self:&{{name}}) -> &Vec<std::rc::Rc<{{rust_define_type value_type}}>> { &self.data_list }
 | ||
|  |     #[allow(dead_code)]
 | ||
|  |     pub fn get(self:&{{name}}, index: usize) -> &std::rc::Rc<{{rust_define_type value_type}}> { &self.data_list[index] }
 | ||
|  |     {{~else~}}
 | ||
|  |         if !__js.is_array() || __js.len() != 1 { | ||
|  |             return Err(LoadError{});
 | ||
|  |         }
 | ||
|  |         let __v = match {{rust_class_name value_type}}::new(&__js[0]) { | ||
|  |             Ok(x) => x,
 | ||
|  |             Err(err) => return Err(err),
 | ||
|  |         };
 | ||
|  |         let t = {{name}} { | ||
|  |             data: __v,
 | ||
|  |         };
 | ||
|  |         Ok(t)
 | ||
|  |     }
 | ||
|  |     #[allow(dead_code)]
 | ||
|  |     pub fn get_data(self:&{{name}}) -> &{{rust_define_type value_type}} { &self.data }
 | ||
|  |     {{~end~}}
 | ||
|  | }
 |