Use Vec<u8> for request and response bodies. Use http's API for creating requests and responses.
This commit is contained in:
		
							parent
							
								
									c9454caff1
								
							
						
					
					
						commit
						a27adc2f73
					
				| @ -137,13 +137,13 @@ impl ToTokens for Api { | |||||||
|             Tokens::new() |             Tokens::new() | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         let add_body_to_request = if let Some(field) = self.request.newtype_body_field() { |         let create_http_request = if let Some(field) = self.request.newtype_body_field() { | ||||||
|             let field_name = field.ident.expect("expected field to have an identifier"); |             let field_name = field.ident.expect("expected field to have an identifier"); | ||||||
| 
 | 
 | ||||||
|             quote! { |             quote! { | ||||||
|                 let request_body = RequestBody(request.#field_name); |                 let request_body = RequestBody(request.#field_name); | ||||||
| 
 | 
 | ||||||
|                 http_request.set_body(::serde_json::to_vec(&request_body)?); |                 let mut http_request = ::http::Request::new(::serde_json::to_vec(&request_body)?); | ||||||
|             } |             } | ||||||
|         } else if self.request.has_body_fields() { |         } 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(); | ||||||
| @ -153,10 +153,12 @@ impl ToTokens for Api { | |||||||
|                     #request_body_init_fields |                     #request_body_init_fields | ||||||
|                 }; |                 }; | ||||||
| 
 | 
 | ||||||
|                 http_request.set_body(::serde_json::to_vec(&request_body)?); |                 let mut http_request = ::http::Request::new(::serde_json::to_vec(&request_body)?); | ||||||
|             } |             } | ||||||
|         } else { |         } else { | ||||||
|             Tokens::new() |             quote! { | ||||||
|  |                 let mut http_request = ::http::Request::new(()); | ||||||
|  |             } | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         let deserialize_response_body = if let Some(field) = self.response.newtype_body_field() { |         let deserialize_response_body = if let Some(field) = self.response.newtype_body_field() { | ||||||
| @ -223,7 +225,7 @@ impl ToTokens for Api { | |||||||
| 
 | 
 | ||||||
|             #request_types |             #request_types | ||||||
| 
 | 
 | ||||||
|             impl<T> ::std::convert::TryFrom<Request> for ::http::Request<T> { |             impl ::std::convert::TryFrom<Request> for ::http::Request<Vec<u8>> { | ||||||
|                 type Error = ::ruma_api::Error; |                 type Error = ::ruma_api::Error; | ||||||
| 
 | 
 | ||||||
|                 #[allow(unused_mut, unused_variables)] |                 #[allow(unused_mut, unused_variables)] | ||||||
| @ -238,28 +240,25 @@ impl ToTokens for Api { | |||||||
|                     { #set_request_path } |                     { #set_request_path } | ||||||
|                     { #set_request_query } |                     { #set_request_query } | ||||||
| 
 | 
 | ||||||
|                     let mut http_request = ::http::Request::new( |                     #create_http_request | ||||||
|                         ::http::Method::#method, | 
 | ||||||
|                         // Every valid URL is a valid URI
 |                     *http_request.method_mut() = ::http::Method::#method; | ||||||
|                         url.into_string().parse().unwrap(), |                     *http_request.uri_mut() = url.into_string().parse().unwrap(); | ||||||
|                     ); |  | ||||||
| 
 | 
 | ||||||
|                     { #add_headers_to_request } |                     { #add_headers_to_request } | ||||||
| 
 | 
 | ||||||
|                     { #add_body_to_request } |  | ||||||
| 
 |  | ||||||
|                     Ok(http_request) |                     Ok(http_request) | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             #response_types |             #response_types | ||||||
| 
 | 
 | ||||||
|             impl<T> ::futures::future::FutureFrom<::http::Response<T>> for Response { |             impl ::futures::future::FutureFrom<::http::Response<Vec<u8>>> for Response { | ||||||
|                 type Future = Box<_Future<Item = Self, Error = Self::Error>>; |                 type Future = Box<_Future<Item = Self, Error = Self::Error>>; | ||||||
|                 type Error = ::ruma_api::Error; |                 type Error = ::ruma_api::Error; | ||||||
| 
 | 
 | ||||||
|                 #[allow(unused_variables)] |                 #[allow(unused_variables)] | ||||||
|                 fn future_from(http_response: ::http::Response<T>) |                 fn future_from(http_response: ::http::Response<Vec<u8>>) | ||||||
|                 -> Box<_Future<Item = Self, Error = Self::Error>> { |                 -> Box<_Future<Item = Self, Error = Self::Error>> { | ||||||
|                     #extract_headers |                     #extract_headers | ||||||
| 
 | 
 | ||||||
| @ -276,7 +275,7 @@ impl ToTokens for Api { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             impl ::ruma_api::Endpoint for Endpoint { |             impl ::ruma_api::Endpoint<Vec<u8>, Vec<u8>> for Endpoint { | ||||||
|                 type Request = Request; |                 type Request = Request; | ||||||
|                 type Response = Response; |                 type Response = Response; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user