diff --git a/src/api.rs b/src/api.rs index c4692f66..376e7b50 100644 --- a/src/api.rs +++ b/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! { diff --git a/src/request.rs b/src/request.rs index d431fa75..43f7fcd6 100644 --- a/src/request.rs +++ b/src/request.rs @@ -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 { - 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> 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() {