From c59b43d0276b92027d97967ce59e58bdc7559902 Mon Sep 17 00:00:00 2001 From: Florian Jacob Date: Thu, 17 May 2018 14:58:23 +0200 Subject: [PATCH] Throw StatusCode error if http response is non-success to prevent a misleading deserialization error on error responses. --- src/api/mod.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/api/mod.rs b/src/api/mod.rs index d1d9b63f..d67508fb 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -243,18 +243,22 @@ impl ToTokens for Api { #[allow(unused_variables)] fn future_from(http_response: ::http::Response>) -> Box<_Future> { - #extract_headers + if http_response.status().is_success() { + #extract_headers - #deserialize_response_body - .and_then(move |response_body| { - let response = Response { - #response_init_fields - }; + #deserialize_response_body + .and_then(move |response_body| { + let response = Response { + #response_init_fields + }; - Ok(response) - }); + Ok(response) + }); - Box::new(future_response) + Box::new(future_response) + } else { + Box::new(::futures::future::err(::ruma_api::Error::StatusCode(http_response.status().clone()))) + } } }