diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-07-26 15:41:21 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-07-26 15:41:21 +0200 |
commit | 91157065f8ade39013d7c8f63b5824f2c6eebfb1 (patch) | |
tree | d24ddc8283895843dfa1111d6d7386de48f78f25 | |
parent | 334084f9b9a3fdad948872b949f0f08e9e1762f4 (diff) |
support multiple len_for annotations per struct
-rw-r--r-- | src/lib.rs | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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 }); |