From 5da7e69f82fe198a5f3f1284975b306344529eac Mon Sep 17 00:00:00 2001 From: Cyborus Date: Mon, 11 Dec 2023 00:36:13 -0500 Subject: [PATCH] checking if a pr exists does not return a body --- src/lib.rs | 23 +++++++++++++++++++++++ src/repository.rs | 4 +--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9e5029b..dea6d44 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -88,6 +88,12 @@ impl Forgejo { self.execute_str(request).await } + async fn get_exists(&self, path: &str) -> Result { + let url = self.url.join("api/v1/").unwrap().join(path).unwrap(); + let request = self.client.get(url).build()?; + self.execute_exists(request).await + } + async fn post( &self, path: &str, @@ -222,6 +228,23 @@ impl Forgejo { status => Err(ForgejoError::UnexpectedStatusCode(status)), } } + + /// Like `execute`, but returns `false` on 404. + async fn execute_exists( + &self, + request: Request, + ) -> Result { + let response = self.client.execute(request).await?; + match response.status() { + status if status.is_success() => Ok(true), + StatusCode::NOT_FOUND => Ok(false), + status if status.is_client_error() => Err(ForgejoError::ApiError( + status, + response.json::().await?.message.unwrap_or_else(|| String::from("[no message]")), + )), + status => Err(ForgejoError::UnexpectedStatusCode(status)), + } + } } #[derive(serde::Deserialize)] diff --git a/src/repository.rs b/src/repository.rs index cea567a..4d89ec9 100644 --- a/src/repository.rs +++ b/src/repository.rs @@ -32,9 +32,7 @@ impl Forgejo { } pub async fn is_merged(&self, owner: &str, repo: &str, pr: u64) -> Result { - self.get_opt::<()>(&format!("repos/{owner}/{repo}/pulls/{pr}/merge")) - .await - .map(|o| o.is_some()) + self.get_exists(&format!("repos/{owner}/{repo}/pulls/{pr}/merge")).await } pub async fn merge_pr(