Strip serde attributes on aggregate Request and Response types.
This commit is contained in:
parent
dce17dbb64
commit
84562c4260
@ -1,4 +1,5 @@
|
||||
use quote::{ToTokens, Tokens};
|
||||
use syn::{Field, MetaItem};
|
||||
|
||||
mod metadata;
|
||||
mod request;
|
||||
@ -9,6 +10,27 @@ use self::metadata::Metadata;
|
||||
use self::request::Request;
|
||||
use self::response::Response;
|
||||
|
||||
pub fn strip_serde_attrs(field: &Field) -> Field {
|
||||
let mut field = field.clone();
|
||||
|
||||
field.attrs = field.attrs.into_iter().filter(|attr| {
|
||||
let (attr_ident, _) = match attr.value {
|
||||
MetaItem::List(ref attr_ident, _) => {
|
||||
(attr_ident, ())
|
||||
}
|
||||
_ => return true,
|
||||
};
|
||||
|
||||
if attr_ident != "serde" {
|
||||
return true;
|
||||
}
|
||||
|
||||
false
|
||||
}).collect();
|
||||
|
||||
field
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Api {
|
||||
metadata: Metadata,
|
||||
|
@ -1,6 +1,8 @@
|
||||
use quote::{ToTokens, Tokens};
|
||||
use syn::{Field, MetaItem, NestedMetaItem};
|
||||
|
||||
use api::strip_serde_attrs;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Request {
|
||||
fields: Vec<RequestField>,
|
||||
@ -134,7 +136,7 @@ impl ToTokens for Request {
|
||||
fn to_tokens(&self, mut tokens: &mut Tokens) {
|
||||
tokens.append(quote! {
|
||||
/// Data for a request to this API endpoint.
|
||||
#[derive(Debug, Serialize)]
|
||||
#[derive(Debug)]
|
||||
pub struct Request
|
||||
});
|
||||
|
||||
@ -144,7 +146,8 @@ impl ToTokens for Request {
|
||||
tokens.append("{");
|
||||
|
||||
for request_field in self.fields.iter() {
|
||||
request_field.field().to_tokens(&mut tokens);
|
||||
strip_serde_attrs(request_field.field()).to_tokens(&mut tokens);
|
||||
|
||||
tokens.append(",");
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
use quote::{ToTokens, Tokens};
|
||||
use syn::{Field, MetaItem, NestedMetaItem};
|
||||
|
||||
use api::strip_serde_attrs;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Response {
|
||||
fields: Vec<ResponseField>,
|
||||
@ -153,12 +155,8 @@ impl ToTokens for Response {
|
||||
} else {
|
||||
tokens.append("{");
|
||||
|
||||
for response in self.fields.iter() {
|
||||
match *response {
|
||||
ResponseField::Body(ref field) => field.to_tokens(&mut tokens),
|
||||
ResponseField::Header(ref field) => field.to_tokens(&mut tokens),
|
||||
ResponseField::NewtypeBody(ref field) => field.to_tokens(&mut tokens),
|
||||
}
|
||||
for response_field in self.fields.iter() {
|
||||
strip_serde_attrs(response_field.field()).to_tokens(&mut tokens);
|
||||
|
||||
tokens.append(",");
|
||||
}
|
||||
@ -197,6 +195,14 @@ pub enum ResponseField {
|
||||
}
|
||||
|
||||
impl ResponseField {
|
||||
fn field(&self) -> &Field {
|
||||
match *self {
|
||||
ResponseField::Body(ref field) => field,
|
||||
ResponseField::Header(ref field) => field,
|
||||
ResponseField::NewtypeBody(ref field) => field,
|
||||
}
|
||||
}
|
||||
|
||||
fn is_body(&self) -> bool {
|
||||
match *self {
|
||||
ResponseField::Body(_) => true,
|
||||
|
Loading…
x
Reference in New Issue
Block a user