diff --git a/src/server/rest.rs b/src/server/rest.rs index 6b20c57f..d145573f 100644 --- a/src/server/rest.rs +++ b/src/server/rest.rs @@ -143,25 +143,18 @@ impl tower_service::Service> for ApiService { let config = Arc::clone(&self.api_config); let peer = self.peer; async move { - match handle_request(config, req).await { - Ok(res) => { - log_response(&peer, method, &path, &res); - Ok::<_, Self::Error>(res) - } + let response = match handle_request(config, req).await { + Ok(response) => response, Err(err) => { - if let Some(apierr) = err.downcast_ref::() { - let mut resp = Response::new(Body::from(apierr.message.clone())); - *resp.status_mut() = apierr.code; - log_response(&peer, method, &path, &resp); - Ok(resp) - } else { - let mut resp = Response::new(Body::from(err.to_string())); - *resp.status_mut() = StatusCode::BAD_REQUEST; - log_response(&peer, method, &path, &resp); - Ok(resp) - } + let (err, code) = match err.downcast_ref::() { + Some(apierr) => (apierr.message.clone(), apierr.code), + _ => (err.to_string(), StatusCode::BAD_REQUEST), + }; + Response::builder().status(code).body(err.into())? } - } + }; + log_response(&peer, method, &path, &response); + Ok(response) } .boxed() }