]> saetta.ns0.it Git - rust/zakform_macro/commitdiff
Started zakform implementation.
authorAndrea Zagli <azagli@libero.it>
Tue, 7 Jul 2026 09:45:11 +0000 (11:45 +0200)
committerAndrea Zagli <azagli@libero.it>
Tue, 7 Jul 2026 09:45:11 +0000 (11:45 +0200)
Cargo.lock
Cargo.toml
src/main.rs
zakform_macro/src/lib.rs

index 765c0bfda6e099ef2e9c91a57c237f9495ded5f6..b0d683f2f85f44bc215bee202ffc1609f6baff19 100644 (file)
@@ -2,6 +2,62 @@
 # It is not intended for manual editing.
 version = 4
 
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
+
+[[package]]
+name = "bumpalo"
+version = "3.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
+
+[[package]]
+name = "cc"
+version = "1.2.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5d6cac793997bd970000024b2934968efe83b382de4fdcf4fcb46b6ee4ad996"
+dependencies = [
+ "find-msvc-tools",
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+[[package]]
+name = "chrono"
+version = "0.4.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-link",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
 [[package]]
 name = "darling"
 version = "0.23.0"
@@ -36,12 +92,110 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+
+[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
 [[package]]
 name = "ident_case"
 version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
+[[package]]
+name = "js-sys"
+version = "0.3.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.186"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+
+[[package]]
+name = "log"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
 [[package]]
 name = "proc-macro2"
 version = "1.0.106"
@@ -60,6 +214,24 @@ dependencies = [
  "proc-macro2",
 ]
 
+[[package]]
+name = "rustversion"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
+
+[[package]]
+name = "shlex"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
 [[package]]
 name = "strsim"
 version = "0.11.1"
@@ -83,6 +255,110 @@ version = "1.0.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
 
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.62.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-result"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link",
+]
+
 [[package]]
 name = "zakform_macro"
 version = "0.1.0"
@@ -97,5 +373,6 @@ dependencies = [
 name = "zakform_macro_app"
 version = "0.1.0"
 dependencies = [
+ "chrono",
  "zakform_macro",
 ]
index 7e6021c03378d7c3abed0db018770cbc74fb6702..408a510827169177d474664d13a88a5d8a77bf17 100644 (file)
@@ -6,4 +6,6 @@ version = "0.1.0"
 edition = "2024"
 
 [dependencies]
-zakform_macro = { path = "./zakform_macro" }
\ No newline at end of file
+zakform_macro = { path = "./zakform_macro" }
+
+chrono = { version = "0.4" }
index 535f4145376ac3865f6505f6ba05b4337386ff8e..f31b27e448897636976bc33c5d50b971f92dc90e 100644 (file)
@@ -6,6 +6,7 @@ pub struct User {
     first_name: String,
     last_name: String,
     age: u32,
+       birthdate: chrono::NaiveDate,
 }
 
 fn main() {
index 06ee672254019dd5533b94d5ecd1281ed0643ef2..e674ac1da959573a8b6b904335031e3752e73a0e 100644 (file)
@@ -1,7 +1,7 @@
 extern crate proc_macro;
 
-use proc_macro::TokenStream;
-use syn::{parse_macro_input, DeriveInput};
+use proc_macro::{Ident, TokenStream};
+use syn::{DeriveInput, TypePath, parse_macro_input};
 use quote::{quote, format_ident};
 
 #[proc_macro_derive(IntoStringHashMap)]
@@ -11,6 +11,7 @@ pub fn derive_into_hash_map(input: TokenStream) -> TokenStream {
     let ident = ast.ident;
 
        let form_ident = format_ident!("{ident}Form");
+       let zakform_ident = format_ident!("{ident}ZakForm");
 
        let fields = match ast {
         syn::DeriveInput{
@@ -32,19 +33,63 @@ pub fn derive_into_hash_map(input: TokenStream) -> TokenStream {
         _ => unimplemented!("derive(IntoStringHashMap) only supports structs with named fields")
     };
 
-       let form_fields = fields.iter().map(|field| {
-        let field = field.clone();
+       let mut form_fields = quote! {};
+       let mut zakform_fields = quote! {};
+
+       let mut get_form = quote! {};
+
+       for field in fields {
         let id = field.ident.unwrap();
-        let ty = field.ty;
 
-        quote! {
+               form_fields.extend(quote! {
             #id: String,
-        }
-    });
+        });
+
+               zakform_fields.extend(quote! {
+            #id: zakform::fields::FieldText,
+               });
+
+               match field.ty {
+                       syn::Type::Path(p) => {
+                               let s = p.path.segments.last().unwrap();
+                               println!("PATH {:?}", s.ident.to_string());
+                               if s.ident.to_string() == "u32" {
+                                       get_form.extend(quote!{
+                                               let mut fi = zakform::fields::FieldText::new(stringify!(#id));
+                                               fi.set_db_type(zakform::fields::FieldDbType::Integer);
+                                               f.add_field(Box::new(fi));
+                                       });
+                               } else if s.ident.to_string() == "NaiveDate" {
+                                       get_form.extend(quote!{
+                                               let mut fi = zakform::fields::FieldText::new(stringify!(#id));
+                                               fi.set_db_type(zakform::fields::FieldDbType::Date);
+                                               f.add_field(Box::new(fi));
+                                       });
+                               } else {
+                                       get_form.extend(quote!{
+                                               let mut fi = zakform::fields::FieldText::new(stringify!(#id));
+                                               f.add_field(Box::new(fi));
+                                       });
+                               }
+                       },
+                       _ => {},
+               };
+    }
 
        let output = quote!{
                pub struct #form_ident {
-                       #(#form_fields)*
+                       #form_fields
+               }
+               pub struct #zakform_ident {
+                       #zakform_fields
+               }
+
+               impl #zakform_ident {
+                       pub fn get_form () -> zakform::form::Form {
+                               let mut f = zakform::form::Form::new();
+                               #get_form
+                               f
+                       }
                }
        };