From f5a3015e1fb518f6ccd5744ed2340f84b561b90b Mon Sep 17 00:00:00 2001 From: Jean-Marie Mineau Date: Fri, 18 Apr 2025 11:07:04 +0200 Subject: [PATCH] update rust edition of androscalpel_serializer_derive --- androscalpel_serializer_derive/Cargo.toml | 2 +- androscalpel_serializer_derive/src/lib.rs | 103 +++++++++++++--------- 2 files changed, 61 insertions(+), 44 deletions(-) diff --git a/androscalpel_serializer_derive/Cargo.toml b/androscalpel_serializer_derive/Cargo.toml index f9bde12..f104560 100644 --- a/androscalpel_serializer_derive/Cargo.toml +++ b/androscalpel_serializer_derive/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "androscalpel_serializer_derive" version = "0.1.0" -edition = "2021" +edition = "2024" [lib] proc-macro = true diff --git a/androscalpel_serializer_derive/src/lib.rs b/androscalpel_serializer_derive/src/lib.rs index 9cb62fd..8ccfd3c 100644 --- a/androscalpel_serializer_derive/src/lib.rs +++ b/androscalpel_serializer_derive/src/lib.rs @@ -3,8 +3,8 @@ use quote::{format_ident, quote, quote_spanned}; use syn::parse::{Parse, ParseStream}; use syn::spanned::Spanned; use syn::{ - parse_macro_input, Attribute, Data, DeriveInput, Field, Fields, Ident, Index, Meta, MetaList, - Token, Type, Variant, + Attribute, Data, DeriveInput, Field, Fields, Ident, Index, Meta, MetaList, Token, Type, + Variant, parse_macro_input, }; /// Derive the type Serializable. @@ -318,19 +318,25 @@ fn get_enum_match(variant: &Variant) -> TokenStream { /// for a specific field `f` accessible using `field_ref`. fn get_implem_size_for_field(f: &Field, field_ref: TokenStream) -> TokenStream { let params = ParamsField::parse(&f.attrs); - let prefix_stream = if let Some(PrefixParamsField(ref stream)) = params.prefix { - quote_spanned! { f.span() => - #stream.iter().collect::>().len() + let prefix_stream = match params.prefix { + Some(PrefixParamsField(ref stream)) => { + quote_spanned! { f.span() => + #stream.iter().collect::>().len() + } + } + _ => { + quote_spanned! { f.span() => 0 } } - } else { - quote_spanned! { f.span() => 0 } }; - let suffix_stream = if let Some(SuffixParamsField(ref stream)) = params.suffix { - quote_spanned! { f.span() => - #stream.iter().collect::>().len() + let suffix_stream = match params.suffix { + Some(SuffixParamsField(ref stream)) => { + quote_spanned! { f.span() => + #stream.iter().collect::>().len() + } + } + _ => { + quote_spanned! { f.span() => 0 } } - } else { - quote_spanned! { f.span() => 0 } }; let main_stream = match (&f.ty, params) { ( @@ -436,23 +442,29 @@ fn get_implem_size(data: &Data, params: &ParamsStruct) -> TokenStream { fn get_implem_serialize_for_field(f: &Field, field_ref: TokenStream) -> TokenStream { let params = ParamsField::parse(&f.attrs); // TODO: Improve error handling - let prefix_stream = if let Some(PrefixParamsField(ref stream)) = params.prefix { - quote_spanned! { f.span() => - for byte in #stream { - ::serialize(&byte, output)?; + let prefix_stream = match params.prefix { + Some(PrefixParamsField(ref stream)) => { + quote_spanned! { f.span() => + for byte in #stream { + ::serialize(&byte, output)?; + } } } - } else { - quote_spanned! { f.span() => } + _ => { + quote_spanned! { f.span() => } + } }; - let suffix_stream = if let Some(SuffixParamsField(ref stream)) = params.suffix { - quote_spanned! { f.span() => - for byte in #stream { - ::serialize(&byte, output)?; + let suffix_stream = match params.suffix { + Some(SuffixParamsField(ref stream)) => { + quote_spanned! { f.span() => + for byte in #stream { + ::serialize(&byte, output)?; + } } } - } else { - quote_spanned! { f.span() => } + _ => { + quote_spanned! { f.span() => } + } }; let main_stream = match (&f.ty, params) { ( @@ -538,7 +550,6 @@ fn get_implem_serialize(data: &Data, params: &ParamsStruct) -> TokenStream { "The first field of a named field variant must be named `prefix` and of the type of the prefix of the enum" ); } - let recurse = fields.named.iter().map(|f| { let name = &f.ident; get_implem_serialize_for_field(f, quote! { *#name }) @@ -587,31 +598,37 @@ fn get_implem_deserialize_for_field(f: &Field, field_ref: TokenStream) -> TokenS let params = ParamsField::parse(&f.attrs); let ty = &f.ty; // TODO: Improve error handling - let prefix_stream = if let Some(PrefixParamsField(ref stream)) = params.prefix { - quote_spanned! { f.span() => - for byte in #stream { - if ::deserialize(input)? != byte { - return Err(androscalpel_serializer::Error::DeserializationError( - "Prefix do not match #stream".into() - )); + let prefix_stream = match params.prefix { + Some(PrefixParamsField(ref stream)) => { + quote_spanned! { f.span() => + for byte in #stream { + if ::deserialize(input)? != byte { + return Err(androscalpel_serializer::Error::DeserializationError( + "Prefix do not match #stream".into() + )); + } } } } - } else { - quote_spanned! { f.span() => } + _ => { + quote_spanned! { f.span() => } + } }; - let suffix_stream = if let Some(SuffixParamsField(ref stream)) = params.suffix { - quote_spanned! { f.span() => - for byte in #stream { - if ::deserialize(input)? != byte { - return Err(androscalpel_serializer::Error::DeserializationError( - "Suffix do not match #stream".into() - )); + let suffix_stream = match params.suffix { + Some(SuffixParamsField(ref stream)) => { + quote_spanned! { f.span() => + for byte in #stream { + if ::deserialize(input)? != byte { + return Err(androscalpel_serializer::Error::DeserializationError( + "Suffix do not match #stream".into() + )); + } } } } - } else { - quote_spanned! { f.span() => } + _ => { + quote_spanned! { f.span() => } + } }; match (ty, params) { (