aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-07-26 15:41:21 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-07-26 15:41:21 +0200
commit91157065f8ade39013d7c8f63b5824f2c6eebfb1 (patch)
treed24ddc8283895843dfa1111d6d7386de48f78f25
parent334084f9b9a3fdad948872b949f0f08e9e1762f4 (diff)
support multiple len_for annotations per struct
-rw-r--r--src/lib.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 3aa762b..bd4128a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -2,7 +2,7 @@ use std::collections::HashMap;
use darling::{FromAttributes, FromMeta};
use proc_macro::TokenStream;
-use proc_macro2::{Ident, Span, TokenStream as TokenStream2};
+use proc_macro2::{Ident, Punct, Spacing, Span, TokenStream as TokenStream2, TokenTree};
use quote::quote;
use syn::{parse, ItemStruct};
@@ -167,6 +167,7 @@ pub fn derive_deserialize(item: TokenStream) -> TokenStream {
}
if len_for.contains_key(&field_name.to_string()) {
+ out.extend([TokenTree::Punct(Punct::new('{', Spacing::Alone))].into_iter());
out.extend(
vec![quote!(
let r = &mut r.take(*len_for.get(#field_name_string).unwrap() as u64);
@@ -192,6 +193,10 @@ pub fn derive_deserialize(item: TokenStream) -> TokenStream {
);
}
+ if len_for.contains_key(&field_name.to_string()) {
+ out.extend([TokenTree::Punct(Punct::new('}', Spacing::Alone))].into_iter());
+ }
+
out
});