From 41f35498fed59f18b282aa9f5778178aea6a79c0 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 9 Sep 2023 16:06:46 +0800 Subject: [PATCH] Update syn to v2.0 --- .../main/rust/catch_panic_macros/Cargo.toml | 2 +- .../main/rust/catch_panic_macros/src/lib.rs | 38 +++++++------------ 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/app/src/main/rust/catch_panic_macros/Cargo.toml b/app/src/main/rust/catch_panic_macros/Cargo.toml index 65f0b739e..137878c44 100644 --- a/app/src/main/rust/catch_panic_macros/Cargo.toml +++ b/app/src/main/rust/catch_panic_macros/Cargo.toml @@ -19,4 +19,4 @@ proc-macro = true [dependencies] proc-macro2 = "1.0" quote = "1.0" -syn = { version = "1.0", features = ["full"] } +syn = { version = "2.0", features = ["full"] } diff --git a/app/src/main/rust/catch_panic_macros/src/lib.rs b/app/src/main/rust/catch_panic_macros/src/lib.rs index bf4184c0f..174a3d81a 100644 --- a/app/src/main/rust/catch_panic_macros/src/lib.rs +++ b/app/src/main/rust/catch_panic_macros/src/lib.rs @@ -3,10 +3,7 @@ use std::ops::Deref; use proc_macro::TokenStream; use quote::{quote, quote_spanned, ToTokens}; use syn::spanned::Spanned; -use syn::{ - parse_macro_input, AttributeArgs, Expr, FnArg, ItemFn, Lit, Meta, MetaNameValue, NestedMeta, - Pat, Path, -}; +use syn::{parse_macro_input, Expr, FnArg, ItemFn, LitStr, Pat, Path}; const ONLY_FUNCTIONS_MSG: &str = "#[catch_panic] can only be applied to functions"; const FIRST_ARG_MSG: &str = @@ -33,30 +30,21 @@ pub fn catch_panic(attr: TokenStream, item: TokenStream) -> TokenStream { let item = proc_macro2::TokenStream::from(item); // parse macro arguments - let args = parse_macro_input!(attr as AttributeArgs); let mut default_value = None; let mut handler = None; - - for arg in args { - if let NestedMeta::Meta(Meta::NameValue(MetaNameValue { - path, - lit: Lit::Str(str), - .. - })) = arg - { - match path.get_ident() { - Some(id) if id == "default" => match str.parse::() { - Ok(expr) => default_value = Some(expr), - Err(err) => abort!(err.to_compile_error(), item), - }, - Some(id) if id == "handler" => match str.parse::() { - Ok(expr) => handler = Some(expr), - Err(err) => abort!(err.to_compile_error(), item), - }, - _ => {} - } + let parser = syn::meta::parser(|meta| { + if meta.path.is_ident("default") { + default_value = Some(meta.value()?.parse::()?.parse::()?); + Ok(()) + } else if meta.path.is_ident("handler") { + handler = Some(meta.value()?.parse::()?.parse::()?); + Ok(()) + } else { + Err(meta.error("unsupported argument")) } - } + }); + + parse_macro_input!(attr with parser); let default_value = match default_value { Some(val) => val.to_token_stream(),