diff --git a/src/api/release.rs b/src/api/release.rs index 474c991..b9d3290 100644 --- a/src/api/release.rs +++ b/src/api/release.rs @@ -32,12 +32,7 @@ pub async fn list_releases( })?; return Ok(release_list); } else if response.status().is_client_error() { - let mesg = response - .json::() - .await - .map_err(|reqwest_err| { - crate::Error::WrappedReqwestErr(reqwest_err) - })?; + let mesg = crate::decode_client_error(response).await?; return Err(crate::Error::ApiErrorMessage(mesg)); } panic!("Reached end of list_releases without matching a return pathway."); @@ -63,12 +58,7 @@ pub async fn create_release( .map_err(|e| crate::Error::from(e))?; return Ok(new_release); } else if response.status().is_client_error() { - let mesg = response - .json::() - .await - .map_err(|reqwest_err| { - crate::Error::WrappedReqwestErr(reqwest_err) - })?; + let mesg = crate::decode_client_error(response).await?; return Err(crate::Error::ApiErrorMessage(mesg)) } panic!("Reached end of create_release without matching a return path"); diff --git a/src/api/release_attachment.rs b/src/api/release_attachment.rs index fb9e072..0a3def3 100644 --- a/src/api/release_attachment.rs +++ b/src/api/release_attachment.rs @@ -45,12 +45,7 @@ pub async fn create_release_attachment( if response.status().is_success() { // TODO: create a struct Attachment and return it to the caller. } else if response.status().is_client_error() { - let mesg = response - .json::() - .await - .map_err(|reqwest_err| { - crate::Error::WrappedReqwestErr(reqwest_err) - })?; + let mesg = crate::decode_client_error(response).await?; return Err(crate::Error::ApiErrorMessage(mesg)); } } diff --git a/src/lib.rs b/src/lib.rs index 14cfab7..42cac0a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,6 +10,15 @@ pub struct ApiError { url: String, } +pub (crate) async fn decode_client_error(response: reqwest::Response) -> Result { + response + .json::() + .await + .map_err(|reqwest_err| { + crate::Error::WrappedReqwestErr(reqwest_err) + }) +} + #[derive(Debug)] pub enum Error { Placeholder, // TODO: Enumerate error modes