1
0
Fork 0
mirror of https://gitlab.com/msrd0/gotham-restful.git synced 2025-02-23 04:52:28 +00:00

use less non-public syn api

This commit is contained in:
Dominic 2020-05-03 23:43:42 +02:00
parent 5e5e3aaf9d
commit 992d9be195
Signed by: msrd0
GPG key ID: DCC8C247452E98F9
6 changed files with 10 additions and 14 deletions

View file

@ -3,7 +3,6 @@ use proc_macro2::TokenStream as TokenStream2;
use quote::{format_ident, quote}; use quote::{format_ident, quote};
use std::cmp::min; use std::cmp::min;
use syn::{ use syn::{
parse_macro_input,
spanned::Spanned, spanned::Spanned,
Data, Data,
DeriveInput, DeriveInput,
@ -54,7 +53,7 @@ impl ParsedFields
fn expand(tokens : TokenStream) -> Result<TokenStream2, Error> fn expand(tokens : TokenStream) -> Result<TokenStream2, Error>
{ {
let krate = super::krate(); let krate = super::krate();
let input = parse_macro_input::parse::<DeriveInput>(tokens)?; let input : DeriveInput = syn::parse(tokens)?;
let ident = input.ident; let ident = input.ident;
let generics = input.generics; let generics = input.generics;

View file

@ -151,10 +151,7 @@ impl MethodArgumentType
fn quote_ty(&self) -> Option<TokenStream2> fn quote_ty(&self) -> Option<TokenStream2>
{ {
match self { match self {
Self::MethodArg(ty) => Some(quote!(#ty)), Self::MethodArg(ty) | Self::DatabaseConnection(ty) | Self::AuthStatus(ty) | Self::AuthStatusRef(ty) => Some(quote!(#ty)),
Self::DatabaseConnection(ty) => Some(quote!(#ty)),
Self::AuthStatus(ty) => Some(quote!(#ty)),
Self::AuthStatusRef(ty) => Some(quote!(#ty)),
_ => None _ => None
} }
} }
@ -280,7 +277,8 @@ fn expand(method : Method, attrs : TokenStream, item : TokenStream) -> Result<To
let krate = super::krate(); let krate = super::krate();
// parse attributes // parse attributes
let mut method_attrs = parse_macro_input::parse::<AttributeArgs>(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) { let resource_path = match method_attrs.remove(0) {
NestedMeta::Meta(Meta::Path(path)) => path, NestedMeta::Meta(Meta::Path(path)) => path,
p => return Err(Error::new(p.span(), "Expected name of the Resource struct this method belongs to")) 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<To
let resource_name = resource_path.segments.last().map(|s| s.ident.to_string()) let resource_name = resource_path.segments.last().map(|s| s.ident.to_string())
.ok_or_else(|| Error::new(resource_path.span(), "Resource name must not be empty"))?; .ok_or_else(|| Error::new(resource_path.span(), "Resource name must not be empty"))?;
let fun = parse_macro_input::parse::<ItemFn>(item)?; let fun : ItemFn = syn::parse(item)?;
let fun_ident = &fun.sig.ident; let fun_ident = &fun.sig.ident;
let fun_vis = &fun.vis; let fun_vis = &fun.vis;
let fun_is_async = fun.sig.asyncness.is_some(); let fun_is_async = fun.sig.asyncness.is_some();

View file

@ -90,6 +90,7 @@ fn parse_attributes(input : &[Attribute]) -> Result<Attrs, Error>
if attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("openapi".to_owned()) if attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("openapi".to_owned())
{ {
let tokens = remove_parens(attr.tokens.clone()); 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::<AttributeArgs>(tokens.into())?; let nested = parse_macro_input::parse::<AttributeArgs>(tokens.into())?;
for meta in nested for meta in nested
{ {

View file

@ -5,7 +5,6 @@ use quote::quote;
use std::iter; use std::iter;
use syn::{ use syn::{
parenthesized, parenthesized,
parse_macro_input,
parse::{Parse, ParseStream, Result as SynResult}, parse::{Parse, ParseStream, Result as SynResult},
punctuated::Punctuated, punctuated::Punctuated,
DeriveInput, DeriveInput,
@ -59,7 +58,7 @@ fn impl_openapi_type(ident : &Ident, generics : &Generics) -> TokenStream2
fn expand(tokens : TokenStream) -> Result<TokenStream2, Error> fn expand(tokens : TokenStream) -> Result<TokenStream2, Error>
{ {
let krate = super::krate(); let krate = super::krate();
let input = parse_macro_input::parse::<DeriveInput>(tokens)?; let input : DeriveInput = syn::parse(tokens)?;
let ident = input.ident; let ident = input.ident;
let generics = input.generics; let generics = input.generics;

View file

@ -7,7 +7,6 @@ use proc_macro2::TokenStream as TokenStream2;
use quote::quote; use quote::quote;
use syn::{ use syn::{
parenthesized, parenthesized,
parse_macro_input,
parse::{Parse, ParseStream}, parse::{Parse, ParseStream},
punctuated::Punctuated, punctuated::Punctuated,
DeriveInput, DeriveInput,
@ -33,7 +32,7 @@ impl Parse for MethodList
fn expand(tokens : TokenStream) -> Result<TokenStream2, Error> fn expand(tokens : TokenStream) -> Result<TokenStream2, Error>
{ {
let krate = super::krate(); let krate = super::krate();
let input = parse_macro_input::parse::<DeriveInput>(tokens)?; let input : DeriveInput = syn::parse(tokens)?;
let ident = input.ident; let ident = input.ident;
let name = ident.to_string(); let name = ident.to_string();

View file

@ -45,7 +45,7 @@ fn process_variant(variant : Variant) -> Result<ErrorVariant, Error>
let status = match variant.attrs.iter() let status = match variant.attrs.iter()
.find(|attr| attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("status".to_string())) .find(|attr| attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("status".to_string()))
{ {
Some(attr) => Some(parse_macro_input::parse::<Path>(remove_parens(attr.tokens.clone()).into())?), Some(attr) => Some(syn::parse2(remove_parens(attr.tokens.clone()))?),
None => None None => None
}; };
@ -85,7 +85,7 @@ fn process_variant(variant : Variant) -> Result<ErrorVariant, Error>
let display = match variant.attrs.iter() let display = match variant.attrs.iter()
.find(|attr| attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("display".to_string())) .find(|attr| attr.path.segments.iter().last().map(|segment| segment.ident.to_string()) == Some("display".to_string()))
{ {
Some(attr) => Some(parse_macro_input::parse::<LitStr>(remove_parens(attr.tokens.clone()).into())?), Some(attr) => Some(syn::parse2(remove_parens(attr.tokens.clone()))?),
None => None None => None
}; };