diff --git a/forgejo-api/src/lib.rs b/forgejo-api/src/lib.rs index 6c894cf..0eb1940 100644 --- a/forgejo-api/src/lib.rs +++ b/forgejo-api/src/lib.rs @@ -22,6 +22,8 @@ pub enum ForgejoError { BadStructure, #[error("unexpected status code {} {}", .0.as_u16(), .0.canonical_reason().unwrap_or(""))] UnexpectedStatusCode(StatusCode), + #[error("{} {}: {}", .0.as_u16(), .0.canonical_reason().unwrap_or(""), .1)] + ApiError(StatusCode, String) } impl From for ForgejoError { @@ -101,6 +103,7 @@ impl Forgejo { let response = self.client.execute(dbg!(request)).await?; match response.status() { status if status.is_success() => Ok(response.json::().await?), + status if status.is_client_error() => Err(ForgejoError::ApiError(status, response.json::().await?.message)), status => Err(ForgejoError::UnexpectedStatusCode(status)) } } @@ -111,11 +114,19 @@ impl Forgejo { match response.status() { status if status.is_success() => Ok(Some(response.json::().await?)), StatusCode::NOT_FOUND => Ok(None), + status if status.is_client_error() => Err(ForgejoError::ApiError(status, response.json::().await?.message)), status => Err(ForgejoError::UnexpectedStatusCode(status)) } } } +#[derive(serde::Deserialize)] +struct ErrorMessage { + message: String, + // intentionally ignored, no need for now + // url: Url +} + #[derive(serde::Deserialize, Debug, PartialEq)] pub struct Repo {