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