From: Andrea Zagli Date: Tue, 7 Jul 2026 12:49:49 +0000 (+0200) Subject: Different approch but lifetime problem. X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=rust%2Fzakform_macro Different approch but lifetime problem. --- diff --git a/zakform_macro/src/lib.rs b/zakform_macro/src/lib.rs index 2ff3637..8a1d340 100644 --- a/zakform_macro/src/lib.rs +++ b/zakform_macro/src/lib.rs @@ -47,29 +47,38 @@ pub fn derive_into_hash_map(input: TokenStream) -> TokenStream { }); zakform_fields.extend(quote! { - pub #id: zakform::fields::FieldText, + pub #id: &mut zakform::fields::FieldText, }); match field.ty { syn::Type::Path(p) => { - get_form_struct_fields.extend(quote! { - #id = zakform::fields::FieldText::new(stringify!(#id)), - }); - let s = p.path.segments.last().unwrap(); println!("PATH {:?}", s.ident.to_string()); if s.ident.to_string() == "u32" { get_form.extend(quote!{ - zf.#id.set_db_type(zakform::fields::FieldDbType::Integer); + let mut #id = zakform::fields::FieldText::new(stringify!(#id)); + #id.set_db_type(zakform::fields::FieldDbType::Integer); + f.add_field(Box::new(#id)); }); } else if s.ident.to_string() == "NaiveDate" { get_form.extend(quote!{ - zf.#id.set_db_type(zakform::fields::FieldDbType::Date); + let mut #id = zakform::fields::FieldText::new(stringify!(#id)); + #id.set_db_type(zakform::fields::FieldDbType::Date); + f.add_field(Box::new(#id)); + }); + } else { + get_form.extend(quote!{ + let mut #id = zakform::fields::FieldText::new(stringify!(#id)); + f.add_field(Box::new(#id)); }); } + get_form_struct_fields.extend(quote! { + #id: f.get_field(stringify!(#id)).unwrap().any().downcast_mut::().unwrap(), + }); + get_form.extend(quote! { - f.add_field(Box::new(zf.#id)); + //f.add_field(Box::new(zf.#id)); }); }, _ => {}, @@ -86,14 +95,14 @@ pub fn derive_into_hash_map(input: TokenStream) -> TokenStream { impl #zakform_ident { pub fn new () -> (#zakform_ident, zakform::form::Form) { - let mut zf = UserZakForm{ - #get_form_struct_fields - }; - let mut f = zakform::form::Form::new(); #get_form + let mut zf = UserZakForm{ + #get_form_struct_fields + }; + (zf, f) } }