Replace Vec<u8> by hyper::Body
The `hyper::Request` and `Response` used in *ruma-client* require a type parameter that implements `hyper::body::Payload`, but no implementation for `Vec<u8>` is provided by a crate. Therefore, the best is to use `hyper::Body` in the macros.
This commit is contained in:
		
							parent
							
								
									adf785ffc9
								
							
						
					
					
						commit
						8703e515a9
					
				| @ -25,6 +25,7 @@ features = ["nightly"] | ||||
| [dev-dependencies] | ||||
| futures = "0.1.21" | ||||
| http = "0.1.5" | ||||
| hyper = "0.12" | ||||
| serde = "1.0.57" | ||||
| serde_derive = "1.0.57" | ||||
| serde_json = "1.0.17" | ||||
|  | ||||
| @ -143,7 +143,7 @@ impl ToTokens for Api { | ||||
|             quote! { | ||||
|                 let request_body = RequestBody(request.#field_name); | ||||
| 
 | ||||
|                 let mut http_request = ::http::Request::new(::serde_json::to_vec(&request_body)?); | ||||
|                 let mut http_request = ::http::Request::new(::serde_json::to_vec(&request_body)?.into()); | ||||
|             } | ||||
|         } else if self.request.has_body_fields() { | ||||
|             let request_body_init_fields = self.request.request_body_init_fields(); | ||||
| @ -153,11 +153,11 @@ impl ToTokens for Api { | ||||
|                     #request_body_init_fields | ||||
|                 }; | ||||
| 
 | ||||
|                 let mut http_request = ::http::Request::new(::serde_json::to_vec(&request_body)?); | ||||
|                 let mut http_request = ::http::Request::new(::serde_json::to_vec(&request_body)?.into()); | ||||
|             } | ||||
|         } else { | ||||
|             quote! { | ||||
|                 let mut http_request = ::http::Request::new(Vec::with_capacity(0)); | ||||
|                 let mut http_request = ::http::Request::new(::hyper::Body::empty()); | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
| @ -165,17 +165,31 @@ impl ToTokens for Api { | ||||
|             let field_type = &field.ty; | ||||
| 
 | ||||
|             quote! { | ||||
|                 let future_response = | ||||
|                     ::serde_json::from_slice::<#field_type>(http_response.body().as_slice()) | ||||
|                         .into_future() | ||||
|                         .map_err(::ruma_api::Error::from) | ||||
|                 let future_response = http_response.into_body() | ||||
|                     .fold(Vec::new(), |mut vec, chunk| { | ||||
|                         vec.extend(chunk.iter()); | ||||
|                         ::futures::future::ok::<_, ::hyper::Error>(vec) | ||||
|                     }) | ||||
|                     .map_err(::ruma_api::Error::from) | ||||
|                     .and_then(|data| | ||||
|                               ::serde_json::from_slice::<#field_type>(data.as_slice()) | ||||
|                               .map_err(::ruma_api::Error::from) | ||||
|                               .into_future() | ||||
|                     ) | ||||
|             } | ||||
|         } else if self.response.has_body_fields() { | ||||
|             quote! { | ||||
|                 let future_response = | ||||
|                     ::serde_json::from_slice::<ResponseBody>(http_response.body().as_slice()) | ||||
|                         .into_future() | ||||
|                         .map_err(::ruma_api::Error::from) | ||||
|                 let future_response = http_response.into_body() | ||||
|                     .fold(Vec::new(), |mut vec, chunk| { | ||||
|                         vec.extend(chunk.iter()); | ||||
|                         ::futures::future::ok::<_, ::hyper::Error>(vec) | ||||
|                     }) | ||||
|                     .map_err(::ruma_api::Error::from) | ||||
|                     .and_then(|data| | ||||
|                               ::serde_json::from_slice::<ResponseBody>(data.as_slice()) | ||||
|                               .map_err(::ruma_api::Error::from) | ||||
|                               .into_future() | ||||
|                     ) | ||||
|             } | ||||
|         } else { | ||||
|             quote! { | ||||
| @ -199,7 +213,7 @@ impl ToTokens for Api { | ||||
| 
 | ||||
|         tokens.append_all(quote! { | ||||
|             #[allow(unused_imports)] | ||||
|             use ::futures::{Future as _Future, IntoFuture as _IntoFuture}; | ||||
|             use ::futures::{Future as _Future, IntoFuture as _IntoFuture, Stream as _Stream}; | ||||
|             use ::ruma_api::Endpoint as _RumaApiEndpoint; | ||||
| 
 | ||||
|             /// The API endpoint.
 | ||||
| @ -208,7 +222,7 @@ impl ToTokens for Api { | ||||
| 
 | ||||
|             #request_types | ||||
| 
 | ||||
|             impl ::std::convert::TryFrom<Request> for ::http::Request<Vec<u8>> { | ||||
|             impl ::std::convert::TryFrom<Request> for ::http::Request<::hyper::Body> { | ||||
|                 type Error = ::ruma_api::Error; | ||||
| 
 | ||||
|                 #[allow(unused_mut, unused_variables)] | ||||
| @ -236,12 +250,12 @@ impl ToTokens for Api { | ||||
| 
 | ||||
|             #response_types | ||||
| 
 | ||||
|             impl ::futures::future::FutureFrom<::http::Response<Vec<u8>>> for Response { | ||||
|             impl ::futures::future::FutureFrom<::http::Response<::hyper::Body>> 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<Vec<u8>>) | ||||
|                 fn future_from(http_response: ::http::Response<::hyper::Body>) | ||||
|                 -> Box<_Future<Item = Self, Error = Self::Error>> { | ||||
|                     if http_response.status().is_success() { | ||||
|                         #extract_headers | ||||
| @ -262,7 +276,7 @@ impl ToTokens for Api { | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             impl ::ruma_api::Endpoint<Vec<u8>, Vec<u8>> for Endpoint { | ||||
|             impl ::ruma_api::Endpoint for Endpoint { | ||||
|                 type Request = Request; | ||||
|                 type Response = Response; | ||||
| 
 | ||||
|  | ||||
| @ -125,6 +125,7 @@ mod api; | ||||
| ///
 | ||||
| /// extern crate futures;
 | ||||
| /// extern crate http;
 | ||||
| /// extern crate hyper;
 | ||||
| /// extern crate ruma_api;
 | ||||
| /// extern crate ruma_api_macros;
 | ||||
| /// extern crate serde;
 | ||||
|  | ||||
| @ -2,6 +2,7 @@ | ||||
| 
 | ||||
| extern crate futures; | ||||
| extern crate http; | ||||
| extern crate hyper; | ||||
| extern crate ruma_api; | ||||
| extern crate ruma_api_macros; | ||||
| extern crate serde; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user