diff options
Diffstat (limited to 'src/http')
| -rw-r--r-- | src/http/github.rs | 69 | ||||
| -rw-r--r-- | src/http/mod.rs | 44 |
2 files changed, 0 insertions, 113 deletions
diff --git a/src/http/github.rs b/src/http/github.rs deleted file mode 100644 index 8d4f18a..0000000 --- a/src/http/github.rs +++ /dev/null @@ -1,69 +0,0 @@ -use super::{Error, HttpClientExt}; - -use serde::Deserialize; - -pub const GITHUB_URL: &str = "https://github.com"; -pub const GITHUB_API: &str = "https://api.github.com"; - -/// Bad version of `/repos/{owner}/{repo}/{compare}/{ref}...{ref}` -#[derive(Deserialize)] -struct Compare { - status: String, - ahead_by: i32, -} - -/// Bad version of `/repos/{owner}/{repo}/pulls/{pull_number}` -#[derive(Deserialize)] -struct PullRequest { - merge_commit_sha: String, -} - -pub trait GithubClientExt { - /// Get the commit that merged [`pr`] in [`repo_owner`]/[`repo_name`] - async fn merge_commit_for( - &self, - repo_owner: &str, - repo_name: &str, - pr: u64, - ) -> Result<String, Error>; - - /// Check if [`commit`] is in [`branch`] of [`repo_owner`]/[`repo_name`] - async fn is_commit_in_branch( - &self, - repo_owner: &str, - repo_name: &str, - branch_name: &str, - commit: &str, - ) -> Result<bool, Error>; -} - -impl GithubClientExt for super::Client { - async fn merge_commit_for( - &self, - repo_owner: &str, - repo_name: &str, - pr: u64, - ) -> Result<String, Error> { - let url = format!("{GITHUB_API}/repos/{repo_owner}/{repo_name}/pulls/{pr}"); - let resp: PullRequest = self.get_json(&url).await?; - let merge_commit = resp.merge_commit_sha; - - Ok(merge_commit) - } - - async fn is_commit_in_branch( - &self, - repo_owner: &str, - repo_name: &str, - branch: &str, - commit: &str, - ) -> Result<bool, Error> { - let url = format!( - "https://api.github.com/repos/{repo_owner}/{repo_name}/compare/{branch}...{commit}" - ); - let resp: Compare = self.get_json(&url).await?; - let in_branch = resp.status != "diverged" && resp.ahead_by >= 0; - - Ok(in_branch) - } -} diff --git a/src/http/mod.rs b/src/http/mod.rs deleted file mode 100644 index fa60d67..0000000 --- a/src/http/mod.rs +++ /dev/null @@ -1,44 +0,0 @@ -use serde::de::DeserializeOwned; -use tracing::trace; - -mod github; - -pub use github::*; - -pub type Client = reqwest::Client; -pub type Response = reqwest::Response; -pub type Error = reqwest::Error; - -/// Fun trait for functions we use with [Client] -pub trait HttpClientExt { - fn default() -> Self; - async fn get_request(&self, url: &str) -> Result<Response, Error>; - async fn get_json<T: DeserializeOwned>(&self, url: &str) -> Result<T, Error>; -} - -impl HttpClientExt for Client { - fn default() -> Self { - reqwest::Client::builder() - .user_agent(format!( - "nixpkgs-tracker-bot/{}", - option_env!("CARGO_PKG_VERSION").unwrap_or_else(|| "development") - )) - .build() - .unwrap() - } - - async fn get_request(&self, url: &str) -> Result<Response, Error> { - trace!("Making GET request to {url}"); - - let resp = self.get(url).send().await?; - resp.error_for_status_ref()?; - - Ok(resp) - } - - async fn get_json<T: DeserializeOwned>(&self, url: &str) -> Result<T, Error> { - let resp = self.get_request(url).await?; - let json = resp.json().await?; - Ok(json) - } -} |
