aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-05-20 20:32:31 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-05-20 20:32:31 +0200
commit6825ef164e32bc8d39f8909e5e57ed58d18dbb8f (patch)
treec0dd40aed0fc691c374d3061765c5f8b752c80f9
parent5e7789e0ad21a05a38a52b4aaa1b51e36a8a0c15 (diff)
initial test args struct
-rw-r--r--Cargo.toml1
-rw-r--r--src/lib.rs14
2 files changed, 13 insertions, 2 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 98294e6..ff29be6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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"] }
diff --git a/src/lib.rs b/src/lib.rs
index 3a9c2ba..c3193ce 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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)?;
)