From de6b08a2b5b6afe3a8ff9e2e16a33265ddff9696 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 6 Sep 2024 19:11:51 +0200 Subject: [PATCH] macros: Simplify internal derive macro input parsing --- crates/ruma-macros/src/api/request.rs | 12 ++++-------- crates/ruma-macros/src/api/response.rs | 12 ++++-------- crates/ruma-macros/src/lib.rs | 4 ++-- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/crates/ruma-macros/src/api/request.rs b/crates/ruma-macros/src/api/request.rs index 733e6801..0d4bc0c0 100644 --- a/crates/ruma-macros/src/api/request.rs +++ b/crates/ruma-macros/src/api/request.rs @@ -3,7 +3,7 @@ use quote::{quote, ToTokens}; use syn::{ parse::{Parse, ParseStream}, punctuated::Punctuated, - DeriveInput, Field, Generics, Ident, ItemStruct, Token, Type, + Field, Generics, Ident, ItemStruct, Token, Type, }; use super::{ @@ -44,13 +44,9 @@ impl Parse for RequestAttr { } } -pub fn expand_derive_request(input: DeriveInput) -> syn::Result { - let fields = match input.data { - syn::Data::Struct(s) => s.fields, - _ => panic!("This derive macro only works on structs"), - }; - - let fields = fields.into_iter().map(RequestField::try_from).collect::>()?; +pub fn expand_derive_request(input: ItemStruct) -> syn::Result { + let fields = + input.fields.into_iter().map(RequestField::try_from).collect::>()?; let mut error_ty = None; diff --git a/crates/ruma-macros/src/api/response.rs b/crates/ruma-macros/src/api/response.rs index 66a77d6a..f6ea621b 100644 --- a/crates/ruma-macros/src/api/response.rs +++ b/crates/ruma-macros/src/api/response.rs @@ -6,7 +6,7 @@ use syn::{ parse::{Parse, ParseStream}, punctuated::Punctuated, visit::Visit, - DeriveInput, Field, Generics, Ident, ItemStruct, Lifetime, Token, Type, + Field, Generics, Ident, ItemStruct, Lifetime, Token, Type, }; use super::{ @@ -59,13 +59,9 @@ impl Parse for ResponseAttr { } } -pub fn expand_derive_response(input: DeriveInput) -> syn::Result { - let fields = match input.data { - syn::Data::Struct(s) => s.fields, - _ => panic!("This derive macro only works on structs"), - }; - - let fields = fields.into_iter().map(ResponseField::try_from).collect::>()?; +pub fn expand_derive_response(input: ItemStruct) -> syn::Result { + let fields = + input.fields.into_iter().map(ResponseField::try_from).collect::>()?; let mut manual_body_serde = false; let mut error_ty = None; let mut status_ident = None; diff --git a/crates/ruma-macros/src/lib.rs b/crates/ruma-macros/src/lib.rs index 53d1c486..dda4a84a 100644 --- a/crates/ruma-macros/src/lib.rs +++ b/crates/ruma-macros/src/lib.rs @@ -397,14 +397,14 @@ pub fn response(attr: TokenStream, item: TokenStream) -> TokenStream { /// Internal helper that the request macro delegates most of its work to. #[proc_macro_derive(Request, attributes(ruma_api))] pub fn derive_request(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); + let input = parse_macro_input!(input); expand_derive_request(input).unwrap_or_else(syn::Error::into_compile_error).into() } /// Internal helper that the response macro delegates most of its work to. #[proc_macro_derive(Response, attributes(ruma_api))] pub fn derive_response(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); + let input = parse_macro_input!(input); expand_derive_response(input).unwrap_or_else(syn::Error::into_compile_error).into() }