Upgrade dependencies
This commit is contained in:
		
							parent
							
								
									adf785ffc9
								
							
						
					
					
						commit
						c9277ddc94
					
				
							
								
								
									
										20
									
								
								Cargo.toml
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								Cargo.toml
									
									
									
									
									
								
							| @ -11,25 +11,25 @@ repository = "https://github.com/ruma/ruma-api-macros" | ||||
| version = "0.2.2" | ||||
| 
 | ||||
| [dependencies] | ||||
| quote = "0.5.2" | ||||
| quote = "0.6.10" | ||||
| ruma-api = "0.5.0" | ||||
| 
 | ||||
| [dependencies.syn] | ||||
| version = "0.13.10" | ||||
| version = "0.15.18" | ||||
| features = ["full"] | ||||
| 
 | ||||
| [dependencies.proc-macro2] | ||||
| version = "0.4.2" | ||||
| version = "0.4.21" | ||||
| features = ["nightly"] | ||||
| 
 | ||||
| [dev-dependencies] | ||||
| futures = "0.1.21" | ||||
| http = "0.1.5" | ||||
| serde = "1.0.57" | ||||
| serde_derive = "1.0.57" | ||||
| serde_json = "1.0.17" | ||||
| serde_urlencoded = "0.5.2" | ||||
| url = "1.7.0" | ||||
| futures = "0.1.25" | ||||
| http = "0.1.13" | ||||
| serde = "1.0.80" | ||||
| serde_derive = "1.0.80" | ||||
| serde_json = "1.0.33" | ||||
| serde_urlencoded = "0.5.3" | ||||
| url = "1.7.2" | ||||
| 
 | ||||
| [lib] | ||||
| proc-macro = true | ||||
|  | ||||
| @ -25,7 +25,7 @@ impl From<Vec<FieldValue>> for Metadata { | ||||
|                 _ => panic!("expected Member::Named"), | ||||
|             }; | ||||
| 
 | ||||
|             match identifier.as_ref() { | ||||
|             match &identifier.to_string()[..] { | ||||
|                 "description" => { | ||||
|                     let expr_lit = match field_value.expr { | ||||
|                         Expr::Lit(expr_lit) => expr_lit, | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| use quote::{ToTokens, Tokens}; | ||||
| use syn::punctuated::Punctuated; | ||||
| use syn::synom::Synom; | ||||
| use syn::{Field, FieldValue, Ident, Meta}; | ||||
| use proc_macro2::{Span, TokenStream}; | ||||
| use quote::{ToTokens, TokenStreamExt}; | ||||
| use syn::{braced, Field, FieldValue, Ident, Meta, Token}; | ||||
| use syn::parse::{Parse, ParseStream, Result}; | ||||
| 
 | ||||
| mod metadata; | ||||
| mod request; | ||||
| @ -23,7 +23,7 @@ pub fn strip_serde_attrs(field: &Field) -> Field { | ||||
|             _ => return true, | ||||
|         }; | ||||
| 
 | ||||
|         if meta_list.ident.as_ref() == "serde" { | ||||
|         if &meta_list.ident.to_string() == "serde" { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
| @ -50,9 +50,9 @@ impl From<RawApi> for Api { | ||||
| } | ||||
| 
 | ||||
| impl ToTokens for Api { | ||||
|     fn to_tokens(&self, tokens: &mut Tokens) { | ||||
|     fn to_tokens(&self, tokens: &mut TokenStream) { | ||||
|         let description = &self.metadata.description; | ||||
|         let method = Ident::from(self.metadata.method.as_ref()); | ||||
|         let method = Ident::new(self.metadata.method.as_ref(), Span::call_site()); | ||||
|         let name = &self.metadata.name; | ||||
|         let path = &self.metadata.path; | ||||
|         let rate_limited = &self.metadata.rate_limited; | ||||
| @ -92,7 +92,7 @@ impl ToTokens for Api { | ||||
| 
 | ||||
|                 if segment.starts_with(':') { | ||||
|                     let path_var = &segment[1..]; | ||||
|                     let path_var_ident = Ident::from(path_var); | ||||
|                     let path_var_ident = Ident::new(path_var, Span::call_site()); | ||||
| 
 | ||||
|                     tokens.append_all(quote! { | ||||
|                         (&request_path.#path_var_ident.to_string()); | ||||
| @ -122,7 +122,7 @@ impl ToTokens for Api { | ||||
|                 url.set_query(Some(&::serde_urlencoded::to_string(request_query)?)); | ||||
|             } | ||||
|         } else { | ||||
|             Tokens::new() | ||||
|             TokenStream::new() | ||||
|         }; | ||||
| 
 | ||||
|         let add_headers_to_request = if self.request.has_header_fields() { | ||||
| @ -134,11 +134,11 @@ impl ToTokens for Api { | ||||
| 
 | ||||
|             header_tokens | ||||
|         } else { | ||||
|             Tokens::new() | ||||
|             TokenStream::new() | ||||
|         }; | ||||
| 
 | ||||
|         let create_http_request = if let Some(field) = self.request.newtype_body_field() { | ||||
|             let field_name = field.ident.expect("expected field to have an identifier"); | ||||
|             let field_name = field.ident.clone().expect("expected field to have an identifier"); | ||||
| 
 | ||||
|             quote! { | ||||
|                 let request_body = RequestBody(request.#field_name); | ||||
| @ -188,13 +188,13 @@ impl ToTokens for Api { | ||||
|                 let mut headers = http_response.headers().clone(); | ||||
|             } | ||||
|         } else { | ||||
|             Tokens::new() | ||||
|             TokenStream::new() | ||||
|         }; | ||||
| 
 | ||||
|         let response_init_fields = if self.response.has_fields() { | ||||
|             self.response.init_fields() | ||||
|         } else { | ||||
|             Tokens::new() | ||||
|             TokenStream::new() | ||||
|         }; | ||||
| 
 | ||||
|         tokens.append_all(quote! { | ||||
| @ -279,8 +279,13 @@ impl ToTokens for Api { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| type ParseMetadata = Punctuated<FieldValue, Token![,]>; | ||||
| type ParseFields = Punctuated<Field, Token![,]>; | ||||
| mod kw { | ||||
|     use syn::custom_keyword; | ||||
| 
 | ||||
|     custom_keyword!(metadata); | ||||
|     custom_keyword!(request); | ||||
|     custom_keyword!(response); | ||||
| } | ||||
| 
 | ||||
| pub struct RawApi { | ||||
|     pub metadata: Vec<FieldValue>, | ||||
| @ -288,18 +293,33 @@ pub struct RawApi { | ||||
|     pub response: Vec<Field>, | ||||
| } | ||||
| 
 | ||||
| impl Synom for RawApi { | ||||
|     named!(parse -> Self, do_parse!( | ||||
|         custom_keyword!(metadata) >> | ||||
|         metadata: braces!(ParseMetadata::parse_terminated) >> | ||||
|         custom_keyword!(request) >> | ||||
|         request: braces!(call!(ParseFields::parse_terminated_with, Field::parse_named)) >> | ||||
|         custom_keyword!(response) >> | ||||
|         response: braces!(call!(ParseFields::parse_terminated_with, Field::parse_named)) >> | ||||
|         (RawApi { | ||||
|             metadata: metadata.1.into_iter().collect(), | ||||
|             request: request.1.into_iter().collect(), | ||||
|             response: response.1.into_iter().collect(), | ||||
| impl Parse for RawApi { | ||||
|     fn parse(input: ParseStream) -> Result<Self> { | ||||
|         input.parse::<kw::metadata>()?; | ||||
|         let metadata; | ||||
|         braced!(metadata in input); | ||||
| 
 | ||||
|         input.parse::<kw::request>()?; | ||||
|         let request; | ||||
|         braced!(request in input); | ||||
| 
 | ||||
|         input.parse::<kw::response>()?; | ||||
|         let response; | ||||
|         braced!(response in input); | ||||
| 
 | ||||
|         Ok(RawApi { | ||||
|             metadata: metadata | ||||
|                 .parse_terminated::<FieldValue, Token![,]>(FieldValue::parse)? | ||||
|                 .into_iter() | ||||
|                 .collect(), | ||||
|             request: request | ||||
|                 .parse_terminated::<Field, Token![,]>(Field::parse_named)? | ||||
|                 .into_iter() | ||||
|                 .collect(), | ||||
|             response: response | ||||
|                 .parse_terminated::<Field, Token![,]>(Field::parse_named)? | ||||
|                 .into_iter() | ||||
|                 .collect(), | ||||
|         }) | ||||
|     )); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| use quote::{ToTokens, Tokens}; | ||||
| use proc_macro2::{Span, TokenStream}; | ||||
| use quote::{ToTokens, TokenStreamExt}; | ||||
| use syn::spanned::Spanned; | ||||
| use syn::{Field, Ident, Lit, Meta, NestedMeta}; | ||||
| 
 | ||||
| @ -9,15 +10,15 @@ pub struct Request { | ||||
| } | ||||
| 
 | ||||
| impl Request { | ||||
|     pub fn add_headers_to_request(&self) -> Tokens { | ||||
|         self.header_fields().fold(Tokens::new(), |mut header_tokens, request_field| { | ||||
|     pub fn add_headers_to_request(&self) -> TokenStream { | ||||
|         self.header_fields().fold(TokenStream::new(), |mut header_tokens, request_field| { | ||||
|             let (field, header_name_string) = match request_field { | ||||
|                 RequestField::Header(field, header_name_string) => (field, header_name_string), | ||||
|                 _ => panic!("expected request field to be header variant"), | ||||
|             }; | ||||
| 
 | ||||
|             let field_name = &field.ident; | ||||
|             let header_name = Ident::from(header_name_string.as_ref()); | ||||
|             let header_name = Ident::new(header_name_string.as_ref(), Span::call_site()); | ||||
| 
 | ||||
|             header_tokens.append_all(quote! { | ||||
|                 headers.append( | ||||
| @ -67,23 +68,23 @@ impl Request { | ||||
|         None | ||||
|     } | ||||
| 
 | ||||
|     pub fn request_body_init_fields(&self) -> Tokens { | ||||
|     pub fn request_body_init_fields(&self) -> TokenStream { | ||||
|         self.struct_init_fields(RequestFieldKind::Body) | ||||
|     } | ||||
| 
 | ||||
|     pub fn request_path_init_fields(&self) -> Tokens { | ||||
|     pub fn request_path_init_fields(&self) -> TokenStream { | ||||
|         self.struct_init_fields(RequestFieldKind::Path) | ||||
|     } | ||||
| 
 | ||||
|     pub fn request_query_init_fields(&self) -> Tokens { | ||||
|     pub fn request_query_init_fields(&self) -> TokenStream { | ||||
|         self.struct_init_fields(RequestFieldKind::Query) | ||||
|     } | ||||
| 
 | ||||
|     fn struct_init_fields(&self, request_field_kind: RequestFieldKind) -> Tokens { | ||||
|         let mut tokens = Tokens::new(); | ||||
|     fn struct_init_fields(&self, request_field_kind: RequestFieldKind) -> TokenStream { | ||||
|         let mut tokens = TokenStream::new(); | ||||
| 
 | ||||
|         for field in self.fields.iter().flat_map(|f| f.field_(request_field_kind)) { | ||||
|             let field_name = field.ident.expect("expected field to have an identifier"); | ||||
|             let field_name = field.ident.clone().expect("expected field to have an identifier"); | ||||
|             let span = field.span(); | ||||
| 
 | ||||
|             tokens.append_all(quote_spanned! {span=> | ||||
| @ -112,7 +113,7 @@ impl From<Vec<Field>> for Request { | ||||
|                     _ => return true, | ||||
|                 }; | ||||
| 
 | ||||
|                 if meta_list.ident.as_ref() != "ruma_api" { | ||||
|                 if &meta_list.ident.to_string() != "ruma_api" { | ||||
|                     return true; | ||||
|                 } | ||||
| 
 | ||||
| @ -121,7 +122,7 @@ impl From<Vec<Field>> for Request { | ||||
|                         NestedMeta::Meta(meta_item) => { | ||||
|                             match meta_item { | ||||
|                                 Meta::Word(ident) => { | ||||
|                                     match ident.as_ref() { | ||||
|                                     match &ident.to_string()[..] { | ||||
|                                         "body" => { | ||||
|                                             has_newtype_body = true; | ||||
|                                             field_kind = RequestFieldKind::NewtypeBody; | ||||
| @ -132,7 +133,7 @@ impl From<Vec<Field>> for Request { | ||||
|                                     } | ||||
|                                 } | ||||
|                                 Meta::NameValue(name_value) => { | ||||
|                                     match name_value.ident.as_ref() { | ||||
|                                     match &name_value.ident.to_string()[..] { | ||||
|                                         "header" => { | ||||
|                                             match name_value.lit { | ||||
|                                                 Lit::Str(lit_str) => header = Some(lit_str.value()), | ||||
| @ -173,7 +174,7 @@ impl From<Vec<Field>> for Request { | ||||
| } | ||||
| 
 | ||||
| impl ToTokens for Request { | ||||
|     fn to_tokens(&self, tokens: &mut Tokens) { | ||||
|     fn to_tokens(&self, tokens: &mut TokenStream) { | ||||
|         let request_struct_header = quote! { | ||||
|             /// Data for a request to this API endpoint.
 | ||||
|             #[derive(Debug)] | ||||
| @ -183,7 +184,7 @@ impl ToTokens for Request { | ||||
|         let request_struct_body = if self.fields.len() == 0 { | ||||
|             quote!(;) | ||||
|         } else { | ||||
|             let fields = self.fields.iter().fold(Tokens::new(), |mut field_tokens, request_field| { | ||||
|             let fields = self.fields.iter().fold(TokenStream::new(), |mut field_tokens, request_field| { | ||||
|                 let field = request_field.field(); | ||||
|                 let span = field.span(); | ||||
| 
 | ||||
| @ -214,7 +215,7 @@ impl ToTokens for Request { | ||||
|                 struct RequestBody(#ty); | ||||
|             }; | ||||
|         } else if self.has_body_fields() { | ||||
|             let fields = self.fields.iter().fold(Tokens::new(), |mut field_tokens, request_field| { | ||||
|             let fields = self.fields.iter().fold(TokenStream::new(), |mut field_tokens, request_field| { | ||||
|                 match *request_field { | ||||
|                     RequestField::Body(ref field) => { | ||||
|                         let span = field.span(); | ||||
| @ -235,13 +236,13 @@ impl ToTokens for Request { | ||||
|                 } | ||||
|             }; | ||||
|         } else { | ||||
|             request_body_struct = Tokens::new(); | ||||
|             request_body_struct = TokenStream::new(); | ||||
|         } | ||||
| 
 | ||||
|         let request_path_struct; | ||||
| 
 | ||||
|         if self.has_path_fields() { | ||||
|             let fields = self.fields.iter().fold(Tokens::new(), |mut field_tokens, request_field| { | ||||
|             let fields = self.fields.iter().fold(TokenStream::new(), |mut field_tokens, request_field| { | ||||
|                 match *request_field { | ||||
|                     RequestField::Path(ref field) => { | ||||
|                         let span = field.span(); | ||||
| @ -262,13 +263,13 @@ impl ToTokens for Request { | ||||
|                 } | ||||
|             }; | ||||
|         } else { | ||||
|             request_path_struct = Tokens::new(); | ||||
|             request_path_struct = TokenStream::new(); | ||||
|         } | ||||
| 
 | ||||
|         let request_query_struct; | ||||
| 
 | ||||
|         if self.has_query_fields() { | ||||
|             let fields = self.fields.iter().fold(Tokens::new(), |mut field_tokens, request_field| { | ||||
|             let fields = self.fields.iter().fold(TokenStream::new(), |mut field_tokens, request_field| { | ||||
|                 match *request_field { | ||||
|                     RequestField::Query(ref field) => { | ||||
|                         let span = field.span(); | ||||
| @ -289,7 +290,7 @@ impl ToTokens for Request { | ||||
|                 } | ||||
|             }; | ||||
|         } else { | ||||
|             request_query_struct = Tokens::new(); | ||||
|             request_query_struct = TokenStream::new(); | ||||
|         } | ||||
| 
 | ||||
|         tokens.append_all(quote! { | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| use quote::{ToTokens, Tokens}; | ||||
| use proc_macro2::{Span, TokenStream}; | ||||
| use quote::{ToTokens, TokenStreamExt}; | ||||
| use syn::spanned::Spanned; | ||||
| use syn::{Field, Ident, Lit, Meta, NestedMeta}; | ||||
| 
 | ||||
| @ -21,13 +22,16 @@ impl Response { | ||||
|         self.fields.iter().any(|field| field.is_header()) | ||||
|     } | ||||
| 
 | ||||
|     pub fn init_fields(&self) -> Tokens { | ||||
|         let mut tokens = Tokens::new(); | ||||
|     pub fn init_fields(&self) -> TokenStream { | ||||
|         let mut tokens = TokenStream::new(); | ||||
| 
 | ||||
|         for response_field in self.fields.iter() { | ||||
|             match *response_field { | ||||
|                 ResponseField::Body(ref field) => { | ||||
|                     let field_name = field.ident.expect("expected field to have an identifier"); | ||||
|                     let field_name = field | ||||
|                         .ident | ||||
|                         .clone() | ||||
|                         .expect("expected field to have an identifier"); | ||||
|                     let span = field.span(); | ||||
| 
 | ||||
|                     tokens.append_all(quote_spanned! {span=> | ||||
| @ -35,8 +39,11 @@ impl Response { | ||||
|                     }); | ||||
|                 } | ||||
|                 ResponseField::Header(ref field, ref header) => { | ||||
|                     let field_name = field.ident.expect("expected field to have an identifier"); | ||||
|                     let header_name = Ident::from(header.as_ref()); | ||||
|                     let field_name = field | ||||
|                         .ident | ||||
|                         .clone() | ||||
|                         .expect("expected field to have an identifier"); | ||||
|                     let header_name = Ident::new(header.as_ref(), Span::call_site()); | ||||
|                     let span = field.span(); | ||||
| 
 | ||||
|                     tokens.append_all(quote_spanned! {span=> | ||||
| @ -48,7 +55,10 @@ impl Response { | ||||
|                     }); | ||||
|                 } | ||||
|                 ResponseField::NewtypeBody(ref field) => { | ||||
|                     let field_name = field.ident.expect("expected field to have an identifier"); | ||||
|                     let field_name = field | ||||
|                         .ident | ||||
|                         .clone() | ||||
|                         .expect("expected field to have an identifier"); | ||||
|                     let span = field.span(); | ||||
| 
 | ||||
|                     tokens.append_all(quote_spanned! {span=> | ||||
| @ -94,7 +104,7 @@ impl From<Vec<Field>> for Response { | ||||
|                     _ => return true, | ||||
|                 }; | ||||
| 
 | ||||
|                 if meta_list.ident.as_ref() != "ruma_api" { | ||||
|                 if &meta_list.ident.to_string() != "ruma_api" { | ||||
|                     return true; | ||||
|                 } | ||||
| 
 | ||||
| @ -103,7 +113,7 @@ impl From<Vec<Field>> for Response { | ||||
|                         NestedMeta::Meta(meta_item) => { | ||||
|                             match meta_item { | ||||
|                                 Meta::Word(ident) => { | ||||
|                                     match ident.as_ref() { | ||||
|                                     match &ident.to_string()[..] { | ||||
|                                         "body" => { | ||||
|                                             has_newtype_body = true; | ||||
|                                             field_kind = ResponseFieldKind::NewtypeBody; | ||||
| @ -112,7 +122,7 @@ impl From<Vec<Field>> for Response { | ||||
|                                     } | ||||
|                                 } | ||||
|                                 Meta::NameValue(name_value) => { | ||||
|                                     match name_value.ident.as_ref() { | ||||
|                                     match &name_value.ident.to_string()[..] { | ||||
|                                         "header" => { | ||||
|                                             match name_value.lit { | ||||
|                                                 Lit::Str(lit_str) => header = Some(lit_str.value()), | ||||
| @ -156,7 +166,7 @@ impl From<Vec<Field>> for Response { | ||||
| } | ||||
| 
 | ||||
| impl ToTokens for Response { | ||||
|     fn to_tokens(&self, tokens: &mut Tokens) { | ||||
|     fn to_tokens(&self, tokens: &mut TokenStream) { | ||||
|         let response_struct_header = quote! { | ||||
|             /// Data in the response from this API endpoint.
 | ||||
|             #[derive(Debug)] | ||||
| @ -166,7 +176,7 @@ impl ToTokens for Response { | ||||
|         let response_struct_body = if self.fields.len() == 0 { | ||||
|             quote!(;) | ||||
|         } else { | ||||
|             let fields = self.fields.iter().fold(Tokens::new(), |mut fields_tokens, response_field| { | ||||
|             let fields = self.fields.iter().fold(TokenStream::new(), |mut fields_tokens, response_field| { | ||||
|                 let field = response_field.field(); | ||||
|                 let span = field.span(); | ||||
| 
 | ||||
| @ -197,7 +207,7 @@ impl ToTokens for Response { | ||||
|                 struct ResponseBody(#ty); | ||||
|             }; | ||||
|         } else if self.has_body_fields() { | ||||
|             let fields = self.fields.iter().fold(Tokens::new(), |mut field_tokens, response_field| { | ||||
|             let fields = self.fields.iter().fold(TokenStream::new(), |mut field_tokens, response_field| { | ||||
|                 match *response_field { | ||||
|                     ResponseField::Body(ref field) => { | ||||
|                         let span = field.span(); | ||||
| @ -218,7 +228,7 @@ impl ToTokens for Response { | ||||
|                 } | ||||
|             }; | ||||
|         } else { | ||||
|             response_body_struct = Tokens::new(); | ||||
|             response_body_struct = TokenStream::new(); | ||||
|         } | ||||
| 
 | ||||
|         tokens.append_all(quote! { | ||||
|  | ||||
| @ -4,13 +4,13 @@ | ||||
| //! See the documentation for the `ruma_api!` macro for usage details.
 | ||||
| 
 | ||||
| #![deny(missing_debug_implementations)] | ||||
| #![feature(proc_macro)] | ||||
| #![recursion_limit="256"] | ||||
| 
 | ||||
| extern crate proc_macro; | ||||
| extern crate proc_macro2; | ||||
| #[macro_use] extern crate quote; | ||||
| extern crate ruma_api; | ||||
| #[macro_use] extern crate syn; | ||||
| extern crate syn; | ||||
| 
 | ||||
| use proc_macro::TokenStream; | ||||
| 
 | ||||
| @ -202,9 +202,9 @@ mod api; | ||||
| /// ```
 | ||||
| #[proc_macro] | ||||
| pub fn ruma_api(input: TokenStream) -> TokenStream { | ||||
|     let raw_api: RawApi = syn::parse(input).expect("ruma_api! failed to parse input"); | ||||
|     let raw_api = syn::parse_macro_input!(input as RawApi); | ||||
| 
 | ||||
|     let api = Api::from(raw_api); | ||||
| 
 | ||||
|     api.into_tokens().into() | ||||
|     api.into_token_stream().into() | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| #![feature(proc_macro, try_from)] | ||||
| #![feature(try_from)] | ||||
| 
 | ||||
| extern crate futures; | ||||
| extern crate http; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user