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() | ||||
|         }; | ||||
| 
 | ||||
|         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"); | ||||
| 
 | ||||
|             quote! { | ||||
|                 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() { | ||||
|             let request_body_init_fields = self.request.request_body_init_fields(); | ||||
| @ -153,10 +153,12 @@ impl ToTokens for Api { | ||||
|                     #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 { | ||||
|             Tokens::new() | ||||
|             quote! { | ||||
|                 let mut http_request = ::http::Request::new(()); | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         let deserialize_response_body = if let Some(field) = self.response.newtype_body_field() { | ||||
| @ -223,7 +225,7 @@ impl ToTokens for Api { | ||||
| 
 | ||||
|             #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; | ||||
| 
 | ||||
|                 #[allow(unused_mut, unused_variables)] | ||||
| @ -238,28 +240,25 @@ impl ToTokens for Api { | ||||
|                     { #set_request_path } | ||||
|                     { #set_request_query } | ||||
| 
 | ||||
|                     let mut http_request = ::http::Request::new( | ||||
|                         ::http::Method::#method, | ||||
|                         // Every valid URL is a valid URI
 | ||||
|                         url.into_string().parse().unwrap(), | ||||
|                     ); | ||||
|                     #create_http_request | ||||
| 
 | ||||
|                     *http_request.method_mut() = ::http::Method::#method; | ||||
|                     *http_request.uri_mut() = url.into_string().parse().unwrap(); | ||||
| 
 | ||||
|                     { #add_headers_to_request } | ||||
| 
 | ||||
|                     { #add_body_to_request } | ||||
| 
 | ||||
|                     Ok(http_request) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             #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 Error = ::ruma_api::Error; | ||||
| 
 | ||||
|                 #[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>> { | ||||
|                     #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 Response = Response; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user