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