Add newtype body fields to the hyper request.
This commit is contained in:
parent
90c3654254
commit
58fab938b0
10
src/api.rs
10
src/api.rs
@ -32,7 +32,15 @@ impl ToTokens for Api {
|
|||||||
tokens
|
tokens
|
||||||
};
|
};
|
||||||
|
|
||||||
let add_body_to_request = if self.request.has_body_fields() {
|
let add_body_to_request = if let Some(field) = self.request.newtype_body_field() {
|
||||||
|
let field_name = field.ident.as_ref().expect("expected body field to have a name");
|
||||||
|
|
||||||
|
quote! {
|
||||||
|
let request_body = RequestBody(request.#field_name);
|
||||||
|
|
||||||
|
hyper_request.set_body(::serde_json::to_vec(&request_body)?);
|
||||||
|
}
|
||||||
|
} else if self.request.has_body_fields() {
|
||||||
let request_body_init_fields = self.request.request_body_init_fields();
|
let request_body_init_fields = self.request.request_body_init_fields();
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
|
@ -11,6 +11,20 @@ impl Request {
|
|||||||
self.fields.iter().any(|field| field.is_body())
|
self.fields.iter().any(|field| field.is_body())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn newtype_body_field(&self) -> Option<&Field> {
|
||||||
|
for request_field in self.fields.iter() {
|
||||||
|
match *request_field {
|
||||||
|
RequestField::NewtypeBody(ref field) => {
|
||||||
|
|
||||||
|
return Some(field);
|
||||||
|
}
|
||||||
|
_ => continue,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
pub fn request_body_init_fields(&self) -> Tokens {
|
pub fn request_body_init_fields(&self) -> Tokens {
|
||||||
let mut tokens = Tokens::new();
|
let mut tokens = Tokens::new();
|
||||||
|
|
||||||
@ -33,23 +47,6 @@ impl Request {
|
|||||||
fn body_fields(&self) -> RequestBodyFields {
|
fn body_fields(&self) -> RequestBodyFields {
|
||||||
RequestBodyFields::new(&self.fields)
|
RequestBodyFields::new(&self.fields)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn newtype_body_field(&self) -> Option<Field> {
|
|
||||||
for request_field in self.fields.iter() {
|
|
||||||
match *request_field {
|
|
||||||
RequestField::NewtypeBody(ref field) => {
|
|
||||||
let mut newtype_field = field.clone();
|
|
||||||
|
|
||||||
newtype_field.ident = None;
|
|
||||||
|
|
||||||
return Some(newtype_field);
|
|
||||||
}
|
|
||||||
_ => continue,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<Vec<Field>> for Request {
|
impl From<Vec<Field>> for Request {
|
||||||
@ -153,6 +150,10 @@ impl ToTokens for Request {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(newtype_body_field) = self.newtype_body_field() {
|
if let Some(newtype_body_field) = self.newtype_body_field() {
|
||||||
|
let mut field = newtype_body_field.clone();
|
||||||
|
|
||||||
|
field.ident = None;
|
||||||
|
|
||||||
tokens.append(quote! {
|
tokens.append(quote! {
|
||||||
/// Data in the request body.
|
/// Data in the request body.
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
@ -161,7 +162,7 @@ impl ToTokens for Request {
|
|||||||
|
|
||||||
tokens.append("(");
|
tokens.append("(");
|
||||||
|
|
||||||
newtype_body_field.to_tokens(&mut tokens);
|
field.to_tokens(&mut tokens);
|
||||||
|
|
||||||
tokens.append(");");
|
tokens.append(");");
|
||||||
} else if self.has_body_fields() {
|
} else if self.has_body_fields() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user