update rust edition of androscalpel_serializer_derive

This commit is contained in:
Jean-Marie Mineau 2025-04-18 11:07:04 +02:00
parent 4fa4043b97
commit f5a3015e1f
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
2 changed files with 61 additions and 44 deletions

View file

@ -1,7 +1,7 @@
[package]
name = "androscalpel_serializer_derive"
version = "0.1.0"
edition = "2021"
edition = "2024"
[lib]
proc-macro = true

View file

@ -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 {
let prefix_stream = match params.prefix {
Some(PrefixParamsField(ref stream)) => {
quote_spanned! { f.span() =>
#stream.iter().collect::<Vec<_>>().len()
}
} else {
}
_ => {
quote_spanned! { f.span() => 0 }
}
};
let suffix_stream = if let Some(SuffixParamsField(ref stream)) = params.suffix {
let suffix_stream = match params.suffix {
Some(SuffixParamsField(ref stream)) => {
quote_spanned! { f.span() =>
#stream.iter().collect::<Vec<_>>().len()
}
} 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 {
let prefix_stream = match params.prefix {
Some(PrefixParamsField(ref stream)) => {
quote_spanned! { f.span() =>
for byte in #stream {
<u8 as androscalpel_serializer::Serializable>::serialize(&byte, output)?;
}
}
} else {
}
_ => {
quote_spanned! { f.span() => }
}
};
let suffix_stream = if let Some(SuffixParamsField(ref stream)) = params.suffix {
let suffix_stream = match params.suffix {
Some(SuffixParamsField(ref stream)) => {
quote_spanned! { f.span() =>
for byte in #stream {
<u8 as androscalpel_serializer::Serializable>::serialize(&byte, output)?;
}
}
} else {
}
_ => {
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,7 +598,8 @@ 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 {
let prefix_stream = match params.prefix {
Some(PrefixParamsField(ref stream)) => {
quote_spanned! { f.span() =>
for byte in #stream {
if <u8 as androscalpel_serializer::Serializable>::deserialize(input)? != byte {
@ -597,10 +609,13 @@ fn get_implem_deserialize_for_field(f: &Field, field_ref: TokenStream) -> TokenS
}
}
}
} else {
}
_ => {
quote_spanned! { f.span() => }
}
};
let suffix_stream = if let Some(SuffixParamsField(ref stream)) = params.suffix {
let suffix_stream = match params.suffix {
Some(SuffixParamsField(ref stream)) => {
quote_spanned! { f.span() =>
for byte in #stream {
if <u8 as androscalpel_serializer::Serializable>::deserialize(input)? != byte {
@ -610,8 +625,10 @@ fn get_implem_deserialize_for_field(f: &Field, field_ref: TokenStream) -> TokenS
}
}
}
} else {
}
_ => {
quote_spanned! { f.span() => }
}
};
match (ty, params) {
(