diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-05-20 20:32:31 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-05-20 20:32:31 +0200 |
commit | 6825ef164e32bc8d39f8909e5e57ed58d18dbb8f (patch) | |
tree | c0dd40aed0fc691c374d3061765c5f8b752c80f9 | |
parent | 5e7789e0ad21a05a38a52b4aaa1b51e36a8a0c15 (diff) |
initial test args struct
-rw-r--r-- | Cargo.toml | 1 | ||||
-rw-r--r-- | src/lib.rs | 14 |
2 files changed, 13 insertions, 2 deletions
@@ -9,5 +9,6 @@ edition = "2021" proc-macro = true [dependencies] +darling = "0.20.1" quote = "1.0" syn = { version = "2.0.16", features = ["full", "extra-traits"] } @@ -1,7 +1,15 @@ +use darling::FromAttributes; use proc_macro::TokenStream; use quote::quote; use syn::{parse, ItemStruct}; +#[derive(Debug, Default, FromAttributes)] +#[darling(attributes(ppproperly))] +#[darling(default)] +struct Args { + len_for: Option<String>, +} + #[proc_macro_derive(Serialize)] pub fn derive_serialize(item: TokenStream) -> TokenStream { let ast: ItemStruct = parse(item).unwrap(); @@ -27,7 +35,7 @@ pub fn derive_serialize(item: TokenStream) -> TokenStream { .into() } -#[proc_macro_derive(Deserialize, attributes(len_for))] +#[proc_macro_derive(Deserialize, attributes(ppproperly))] pub fn derive_deserialize(item: TokenStream) -> TokenStream { let ast: ItemStruct = parse(item).unwrap(); let name = ast.ident; @@ -35,7 +43,9 @@ pub fn derive_deserialize(item: TokenStream) -> TokenStream { let deserializers = ast.fields.iter().map(|field| { let field_name = field.ident.as_ref().expect("should be a names struct"); - println!("{:?}", field.attrs); + let args = Args::from_attributes(&field.attrs).unwrap(); + println!("{:?}", args); + quote!( self.#field_name.deserialize(r)?; ) |