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
|
||||
};
|
||||
|
||||
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();
|
||||
|
||||
quote! {
|
||||
|
@ -11,6 +11,20 @@ impl Request {
|
||||
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 {
|
||||
let mut tokens = Tokens::new();
|
||||
|
||||
@ -33,23 +47,6 @@ impl Request {
|
||||
fn body_fields(&self) -> RequestBodyFields {
|
||||
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 {
|
||||
@ -153,6 +150,10 @@ impl ToTokens for Request {
|
||||
}
|
||||
|
||||
if let Some(newtype_body_field) = self.newtype_body_field() {
|
||||
let mut field = newtype_body_field.clone();
|
||||
|
||||
field.ident = None;
|
||||
|
||||
tokens.append(quote! {
|
||||
/// Data in the request body.
|
||||
#[derive(Debug, Serialize)]
|
||||
@ -161,7 +162,7 @@ impl ToTokens for Request {
|
||||
|
||||
tokens.append("(");
|
||||
|
||||
newtype_body_field.to_tokens(&mut tokens);
|
||||
field.to_tokens(&mut tokens);
|
||||
|
||||
tokens.append(");");
|
||||
} else if self.has_body_fields() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user