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