diff options
author | Robert O'Callahan <roc@pernos.co> | 2021-11-22 20:52:41 +1300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-22 08:52:41 +0100 |
commit | a40b2aa13ed46f9a0ac1cb92145a012151538267 (patch) | |
tree | 2cea3d49125f0df7d8d63056ccb0a807bd909aea | |
parent | e04e7a8f1942add2b3330f00420040ffeb5854d6 (diff) |
Add support for listing commit statuses (#159)
-rw-r--r-- | src/api/repos.rs | 7 | ||||
-rw-r--r-- | src/api/repos/status.rs | 46 |
2 files changed, 52 insertions, 1 deletions
diff --git a/src/api/repos.rs b/src/api/repos.rs index f4bd3e6..e94b9f4 100644 --- a/src/api/repos.rs +++ b/src/api/repos.rs @@ -13,7 +13,7 @@ mod generate; use crate::{models, params, Octocrab, Result}; pub use file::UpdateFileBuilder; pub use releases::ReleasesHandler; -pub use status::CreateStatusBuilder; +pub use status::{CreateStatusBuilder, ListStatusesBuilder}; pub use tags::ListTagsBuilder; pub use generate::GenerateRepositoryBuilder; @@ -252,6 +252,11 @@ impl<'octo> RepoHandler<'octo> { CreateStatusBuilder::new(self, sha, state) } + /// List statuses for a reference. + pub fn list_statuses(&self, sha: String) -> ListStatusesBuilder<'_, '_> { + ListStatusesBuilder::new(self, sha) + } + /// List events on this repository. /// /// Takes an optional etag which allows for efficient polling. Here is a quick example to poll a diff --git a/src/api/repos/status.rs b/src/api/repos/status.rs index bd3f7a4..2e39f72 100644 --- a/src/api/repos/status.rs +++ b/src/api/repos/status.rs @@ -71,3 +71,49 @@ impl<'octo, 'r> CreateStatusBuilder<'octo, 'r> { self.handler.crab.put(url, Some(&self)).await } } + +#[derive(serde::Serialize)] +pub struct ListStatusesBuilder<'octo, 'r> { + #[serde(skip)] + handler: &'r RepoHandler<'octo>, + #[serde(skip)] + sha: String, + #[serde(skip_serializing_if = "Option::is_none")] + per_page: Option<u8>, + #[serde(skip_serializing_if = "Option::is_none")] + page: Option<u32>, +} + +impl<'octo, 'r> ListStatusesBuilder<'octo, 'r> { + pub fn new(handler: &'r RepoHandler<'octo>, sha: String) -> Self { + Self { + handler, + sha, + per_page: None, + page: None, + } + } + + /// Results per page (max 100). + pub fn per_page(mut self, per_page: impl Into<u8>) -> Self { + self.per_page = Some(per_page.into()); + self + } + + /// Page number of the results to fetch. + pub fn page(mut self, page: impl Into<u32>) -> Self { + self.page = Some(page.into()); + self + } + + /// Sends the actual request. + pub async fn send(self) -> crate::Result<crate::Page<crate::models::Status>> { + let url = format!( + "repos/{owner}/{repo}/commits/{sha}/statuses", + owner = self.handler.owner, + repo = self.handler.repo, + sha = self.sha, + ); + self.handler.crab.get(url, Some(&self)).await + } +} |