From 0369903c82585ae09544f727f5ffb69229e44835 Mon Sep 17 00:00:00 2001 From: link2xt Date: Sat, 6 Jul 2024 02:02:05 +0000 Subject: [PATCH] Update `syn` and `darling` in yerpc-derive --- yerpc-derive/Cargo.toml | 4 ++-- yerpc-derive/src/lib.rs | 11 ++++++++--- yerpc-derive/src/parse.rs | 16 ++++++++-------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/yerpc-derive/Cargo.toml b/yerpc-derive/Cargo.toml index 34495b3..6e0e02e 100644 --- a/yerpc-derive/Cargo.toml +++ b/yerpc-derive/Cargo.toml @@ -16,8 +16,8 @@ proc-macro = true [dependencies] proc-macro2 = "1.0.37" quote = "1.0.18" -syn = { version = "1.0.91", features = ["full", "parsing", "printing"] } -darling = "0.14.0" +syn = { version = "2.0.68", features = ["full", "parsing", "printing"] } +darling = "0.20.0" convert_case = "0.5.0" [features] diff --git a/yerpc-derive/src/lib.rs b/yerpc-derive/src/lib.rs index 473cca5..a0e538f 100644 --- a/yerpc-derive/src/lib.rs +++ b/yerpc-derive/src/lib.rs @@ -3,12 +3,13 @@ #![warn(missing_debug_implementations, missing_docs, clippy::wildcard_imports)] extern crate darling; +use darling::ast::NestedMeta; use darling::{FromAttributes, FromMeta}; #[cfg(feature = "openrpc")] use openrpc::generate_openrpc_generator; use proc_macro::TokenStream; use quote::quote; -use syn::{parse_macro_input, AttributeArgs, Item}; +use syn::{parse_macro_input, Item}; #[cfg(feature = "openrpc")] mod openrpc; @@ -43,10 +44,14 @@ pub fn rpc(attr: TokenStream, tokens: TokenStream) -> TokenStream { let item = parse_macro_input!(tokens as Item); match &item { Item::Impl(input) => { - let attr_args = parse_macro_input!(attr as AttributeArgs); + let attr_args = match NestedMeta::parse_meta_list(attr.into()) { + Ok(v) => v, + Err(err) => return TokenStream::from(darling::Error::from(err).write_errors()), + }; + let attr_args = match RootAttrArgs::from_list(&attr_args) { Ok(args) => args, - Err(err) => return err.write_errors().into(), + Err(err) => return TokenStream::from(err.write_errors()), }; if attr_args.openrpc_outdir.is_none() && attr_args.ts_outdir.is_none() { return syn::Error::new_spanned( diff --git a/yerpc-derive/src/parse.rs b/yerpc-derive/src/parse.rs index 3ee32f6..38f3b15 100644 --- a/yerpc-derive/src/parse.rs +++ b/yerpc-derive/src/parse.rs @@ -1,7 +1,6 @@ use super::MethodAttrArgs; use darling::FromAttributes; -// use proc_macro2::Ident; -use syn::{FnArg, Generics, Ident, ImplItem, ImplItemMethod, ItemImpl, Pat, ReturnType, Type}; +use syn::{FnArg, Generics, Ident, ImplItem, ImplItemFn, ItemImpl, Pat, ReturnType, Type}; use crate::RootAttrArgs; @@ -25,7 +24,7 @@ impl<'s> RpcInfo<'s> { .items .iter() .filter_map(|item| { - if let ImplItem::Method(method) = item { + if let ImplItem::Fn(method) = item { Some(RemoteProcedure::from_method(attr_args, method)) } else { None @@ -93,10 +92,11 @@ impl<'s> Input<'s> { fn parse_doc_comment(attrs: &[syn::Attribute]) -> Option { let mut parts = vec![]; for attr in attrs { - let meta = attr.parse_meta().unwrap(); - if let syn::Meta::NameValue(meta) = meta { - if let syn::Lit::Str(doc) = meta.lit { - parts.push(doc.value()); + if let syn::Meta::NameValue(meta) = &attr.meta { + if let syn::Expr::Lit(expr_lit) = &meta.value { + if let syn::Lit::Str(lit_str) = &expr_lit.lit { + parts.push(lit_str.value()); + } } } } @@ -108,7 +108,7 @@ fn parse_doc_comment(attrs: &[syn::Attribute]) -> Option { } impl<'s> RemoteProcedure<'s> { - pub fn from_method(root_attr_args: &RootAttrArgs, method: &'s ImplItemMethod) -> Self { + pub fn from_method(root_attr_args: &RootAttrArgs, method: &'s ImplItemFn) -> Self { let args = MethodAttrArgs::from_attributes(&method.attrs).unwrap_or_default(); let name = args.name.unwrap_or_else(|| method.sig.ident.to_string()); let output = match &method.sig.output {