From 992d9be195cddf054c717413ec8b4658f8f9e04b Mon Sep 17 00:00:00 2001 From: Dominic Date: Sun, 3 May 2020 23:43:42 +0200 Subject: [PATCH] use less non-public syn api --- gotham_restful_derive/src/from_body.rs | 3 +-- gotham_restful_derive/src/method.rs | 10 ++++------ gotham_restful_derive/src/openapi_type.rs | 1 + gotham_restful_derive/src/request_body.rs | 3 +-- gotham_restful_derive/src/resource.rs | 3 +-- gotham_restful_derive/src/resource_error.rs | 4 ++-- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/gotham_restful_derive/src/from_body.rs b/gotham_restful_derive/src/from_body.rs index c4fab76..9b7aa38 100644 --- a/gotham_restful_derive/src/from_body.rs +++ b/gotham_restful_derive/src/from_body.rs @@ -3,7 +3,6 @@ use proc_macro2::TokenStream as TokenStream2; use quote::{format_ident, quote}; use std::cmp::min; use syn::{ - parse_macro_input, spanned::Spanned, Data, DeriveInput, @@ -54,7 +53,7 @@ impl ParsedFields fn expand(tokens : TokenStream) -> Result { let krate = super::krate(); - let input = parse_macro_input::parse::(tokens)?; + let input : DeriveInput = syn::parse(tokens)?; let ident = input.ident; let generics = input.generics; diff --git a/gotham_restful_derive/src/method.rs b/gotham_restful_derive/src/method.rs index 580ea75..53fac96 100644 --- a/gotham_restful_derive/src/method.rs +++ b/gotham_restful_derive/src/method.rs @@ -151,10 +151,7 @@ impl MethodArgumentType fn quote_ty(&self) -> Option { match self { - Self::MethodArg(ty) => Some(quote!(#ty)), - Self::DatabaseConnection(ty) => Some(quote!(#ty)), - Self::AuthStatus(ty) => Some(quote!(#ty)), - Self::AuthStatusRef(ty) => Some(quote!(#ty)), + Self::MethodArg(ty) | Self::DatabaseConnection(ty) | Self::AuthStatus(ty) | Self::AuthStatusRef(ty) => Some(quote!(#ty)), _ => None } } @@ -280,7 +277,8 @@ fn expand(method : Method, attrs : TokenStream, item : TokenStream) -> Result(attrs)?; + // TODO this is not public api but syn currently doesn't offer another convenient way to parse AttributeArgs + let mut method_attrs : AttributeArgs = parse_macro_input::parse(attrs)?; let resource_path = match method_attrs.remove(0) { NestedMeta::Meta(Meta::Path(path)) => path, p => return Err(Error::new(p.span(), "Expected name of the Resource struct this method belongs to")) @@ -288,7 +286,7 @@ fn expand(method : Method, attrs : TokenStream, item : TokenStream) -> Result(item)?; + let fun : ItemFn = syn::parse(item)?; let fun_ident = &fun.sig.ident; let fun_vis = &fun.vis; let fun_is_async = fun.sig.asyncness.is_some(); diff --git a/gotham_restful_derive/src/openapi_type.rs b/gotham_restful_derive/src/openapi_type.rs index a65e880..62e51ca 100644 --- a/gotham_restful_derive/src/openapi_type.rs +++ b/gotham_restful_derive/src/openapi_type.rs @@ -90,6 +90,7 @@ fn parse_attributes(input : &[Attribute]) -> Result if attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("openapi".to_owned()) { let tokens = remove_parens(attr.tokens.clone()); + // TODO this is not public api but syn currently doesn't offer another convenient way to parse AttributeArgs let nested = parse_macro_input::parse::(tokens.into())?; for meta in nested { diff --git a/gotham_restful_derive/src/request_body.rs b/gotham_restful_derive/src/request_body.rs index ea6ae4d..57909b3 100644 --- a/gotham_restful_derive/src/request_body.rs +++ b/gotham_restful_derive/src/request_body.rs @@ -5,7 +5,6 @@ use quote::quote; use std::iter; use syn::{ parenthesized, - parse_macro_input, parse::{Parse, ParseStream, Result as SynResult}, punctuated::Punctuated, DeriveInput, @@ -59,7 +58,7 @@ fn impl_openapi_type(ident : &Ident, generics : &Generics) -> TokenStream2 fn expand(tokens : TokenStream) -> Result { let krate = super::krate(); - let input = parse_macro_input::parse::(tokens)?; + let input : DeriveInput = syn::parse(tokens)?; let ident = input.ident; let generics = input.generics; diff --git a/gotham_restful_derive/src/resource.rs b/gotham_restful_derive/src/resource.rs index eade96e..23f0171 100644 --- a/gotham_restful_derive/src/resource.rs +++ b/gotham_restful_derive/src/resource.rs @@ -7,7 +7,6 @@ use proc_macro2::TokenStream as TokenStream2; use quote::quote; use syn::{ parenthesized, - parse_macro_input, parse::{Parse, ParseStream}, punctuated::Punctuated, DeriveInput, @@ -33,7 +32,7 @@ impl Parse for MethodList fn expand(tokens : TokenStream) -> Result { let krate = super::krate(); - let input = parse_macro_input::parse::(tokens)?; + let input : DeriveInput = syn::parse(tokens)?; let ident = input.ident; let name = ident.to_string(); diff --git a/gotham_restful_derive/src/resource_error.rs b/gotham_restful_derive/src/resource_error.rs index 4958123..2d4c341 100644 --- a/gotham_restful_derive/src/resource_error.rs +++ b/gotham_restful_derive/src/resource_error.rs @@ -45,7 +45,7 @@ fn process_variant(variant : Variant) -> Result let status = match variant.attrs.iter() .find(|attr| attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("status".to_string())) { - Some(attr) => Some(parse_macro_input::parse::(remove_parens(attr.tokens.clone()).into())?), + Some(attr) => Some(syn::parse2(remove_parens(attr.tokens.clone()))?), None => None }; @@ -85,7 +85,7 @@ fn process_variant(variant : Variant) -> Result let display = match variant.attrs.iter() .find(|attr| attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("display".to_string())) { - Some(attr) => Some(parse_macro_input::parse::(remove_parens(attr.tokens.clone()).into())?), + Some(attr) => Some(syn::parse2(remove_parens(attr.tokens.clone()))?), None => None };