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