diff --git a/macro_ui/src/lib.rs b/macro_ui/src/lib.rs index ba6cdd9d..4cda0673 100644 --- a/macro_ui/src/lib.rs +++ b/macro_ui/src/lib.rs @@ -163,7 +163,10 @@ fn parse_struct_field(field: &Field) -> TokenStream2 { #field_name: parser.parse_u32(&format!("{}.{}", path, stringify!(#field_name)), 0), } } else { - quote! {} + let name = &get_field_type(field); + quote! { + #field_name: #name::parse(parser, &format!("{}.{}", path, stringify!(#field_name)), &format!(" {}", spaces)), + } } } diff --git a/rpg_tools_core/examples/parser_macro.rs b/rpg_tools_core/examples/parser_macro.rs index efc75e61..a407c1a8 100644 --- a/rpg_tools_core/examples/parser_macro.rs +++ b/rpg_tools_core/examples/parser_macro.rs @@ -7,20 +7,24 @@ use std::collections::HashMap; use macro_ui::ui; +#[derive(ui, Debug, Default)] +pub struct Inner { + pub c: u32, +} + #[derive(ui, Debug, Default)] pub struct Test { pub a: u32, pub b: u32, -} - -impl Test { - pub fn new(a: u32, b: u32) -> Self { - Self { a, b } - } + pub inner: Inner, } fn main() { - let parser = MockParser::new(HashMap::from([("test.a", "2"), ("test.b", "3")])); + let parser = MockParser::new(HashMap::from([ + ("test.a", "2"), + ("test.b", "3"), + ("test.inner.c", "4"), + ])); let test = Test::parse(&parser, "test", ""); println!("Values:{:?}", test); }