Add RequestBody and ResponseBody structs.

This commit is contained in:
Jimmy Cuadra 2017-05-13 18:30:19 -07:00
parent 06388333af
commit ef3ee2d2f3
2 changed files with 68 additions and 0 deletions

View File

@ -6,6 +6,12 @@ pub struct Request {
fields: Vec<RequestField>, fields: Vec<RequestField>,
} }
impl Request {
pub fn has_body_fields(&self) -> bool {
self.fields.iter().any(|field| field.is_body())
}
}
impl From<Vec<Field>> for Request { impl From<Vec<Field>> for Request {
fn from(fields: Vec<Field>) -> Self { fn from(fields: Vec<Field>) -> Self {
let request_fields = fields.into_iter().map(|field| { let request_fields = fields.into_iter().map(|field| {
@ -68,6 +74,25 @@ impl ToTokens for Request {
tokens.append("}"); tokens.append("}");
} }
if self.has_body_fields() {
tokens.append(quote! {
/// Data in the request body.
#[derive(Debug, Serialize)]
struct RequestBody
});
tokens.append("{");
for request_field in self.fields.iter() {
match *request_field {
RequestField::Body(ref field) => field.to_tokens(&mut tokens),
_ => {}
}
}
tokens.append("}");
}
} }
} }
@ -78,3 +103,12 @@ pub enum RequestField {
Path(String, Field), Path(String, Field),
Query(Field), Query(Field),
} }
impl RequestField {
fn is_body(&self) -> bool {
match *self {
RequestField::Body(_) => true,
_ => false,
}
}
}

View File

@ -6,6 +6,12 @@ pub struct Response {
fields: Vec<ResponseField>, fields: Vec<ResponseField>,
} }
impl Response {
pub fn has_body_fields(&self) -> bool {
self.fields.iter().any(|field| field.is_body())
}
}
impl From<Vec<Field>> for Response { impl From<Vec<Field>> for Response {
fn from(fields: Vec<Field>) -> Self { fn from(fields: Vec<Field>) -> Self {
let response_fields = fields.into_iter().map(|field| { let response_fields = fields.into_iter().map(|field| {
@ -55,6 +61,25 @@ impl ToTokens for Response {
tokens.append("}"); tokens.append("}");
} }
if self.has_body_fields() {
tokens.append(quote! {
/// Data in the response body.
#[derive(Debug, Deserialize)]
struct ResponseBody
});
tokens.append("{");
for response_field in self.fields.iter() {
match *response_field {
ResponseField::Body(ref field) => field.to_tokens(&mut tokens),
_ => {}
}
}
tokens.append("}");
}
} }
} }
@ -63,3 +88,12 @@ pub enum ResponseField {
Body(Field), Body(Field),
Header(String, Field), Header(String, Field),
} }
impl ResponseField {
fn is_body(&self) -> bool {
match *self {
ResponseField::Body(_) => true,
_ => false,
}
}
}