]> saetta.ns0.it Git - rust/zakform_macro/commitdiff
Different approch but lifetime problem. master
authorAndrea Zagli <azagli@libero.it>
Tue, 7 Jul 2026 12:49:49 +0000 (14:49 +0200)
committerAndrea Zagli <azagli@libero.it>
Tue, 7 Jul 2026 12:49:49 +0000 (14:49 +0200)
zakform_macro/src/lib.rs

index 2ff3637173f198a5e8177b91be70857b26117743..8a1d34000b0677539431216d5086d3404ae3168b 100644 (file)
@@ -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::<zakform::fields::FieldText>().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)
                        }
                }