diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-07 17:32:27 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-04-07 17:32:27 +0200 |
commit | 678442fda0cb58c91a53ddeeca6de5353e472b20 (patch) | |
tree | ab20dbcec12b9b87c00ff3c2c25c8a4762d003a4 | |
parent | 857a27350c88fa2b1acd7d8de34214d736b444da (diff) |
Add endpoint API implementation for problems
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | librepology/src/v1/api/client.rs | 5 | ||||
-rw-r--r-- | librepology/src/v1/api/request.rs | 21 | ||||
-rw-r--r-- | librepology/src/v1/api/request_builder.rs | 34 |
3 files changed, 60 insertions, 0 deletions
diff --git a/librepology/src/v1/api/client.rs b/librepology/src/v1/api/client.rs index 5a4e7f2..8d052d5 100644 --- a/librepology/src/v1/api/client.rs +++ b/librepology/src/v1/api/client.rs @@ -2,6 +2,7 @@ use crate::endpoint::EndpointUrl; use crate::v1::error::Result; use crate::v1::error::RepologyError; use crate::v1::api::ProjectRequestBuilder; +use crate::v1::api::ProblemsRequestBuilder; static APP_USER_AGENT: &str = concat!( env!("CARGO_PKG_NAME"), @@ -38,5 +39,9 @@ impl ApiClient { ProjectRequestBuilder(self) } + pub fn problems<'a>(&'a self) -> ProblemsRequestBuilder<'a> { + ProblemsRequestBuilder(self) + } + } diff --git a/librepology/src/v1/api/request.rs b/librepology/src/v1/api/request.rs index fef4385..41bab81 100644 --- a/librepology/src/v1/api/request.rs +++ b/librepology/src/v1/api/request.rs @@ -5,6 +5,8 @@ use crate::v1::api::ProjectRequestFilteredBuilder; use crate::v1::api::Response; use crate::v1::error::RepologyError; use crate::v1::error::Result; +use crate::v1::api::ProblemsForMaintainerAndRepoRequestBuilder; +use crate::v1::api::ProblemsForRepoRequestBuilder; pub struct Request<'a> { client: &'a ApiClient, @@ -123,3 +125,22 @@ impl<'a> ToRequest<'a> for ProjectRequestFilteredBuilder<'a> { } } + +impl<'a> ToRequest<'a> for ProblemsForRepoRequestBuilder<'a> { + fn to_request(self) -> Request<'a> { + Request { + client: self.0, + request_string: format!("repository/{}/problems", self.1), + } + } +} + +impl<'a> ToRequest<'a> for ProblemsForMaintainerAndRepoRequestBuilder<'a> { + fn to_request(self) -> Request<'a> { + Request { + client: self.client, + request_string: format!("maintainer/{}/problems-for-repo/{}", self.maintainer, self.repo), + } + } +} + diff --git a/librepology/src/v1/api/request_builder.rs b/librepology/src/v1/api/request_builder.rs index 7218caa..09c0329 100644 --- a/librepology/src/v1/api/request_builder.rs +++ b/librepology/src/v1/api/request_builder.rs @@ -109,3 +109,37 @@ pub enum NumberOrRange { Range(Option<usize>, Option<usize>), } + + +pub struct ProblemsRequestBuilder<'a>(pub(super) &'a ApiClient); + +impl<'a> ProblemsRequestBuilder<'a> { + pub fn for_maintainer(self, name: String) -> ProblemsForMaintainerRequestBuilder<'a> { + ProblemsForMaintainerRequestBuilder(self.0, name) + } + + pub fn for_repo(self, name: String) -> ProblemsForRepoRequestBuilder<'a> { + ProblemsForRepoRequestBuilder(self.0, name) + } +} + +pub struct ProblemsForMaintainerRequestBuilder<'a>(&'a ApiClient, String); +pub struct ProblemsForRepoRequestBuilder<'a>(pub(super) &'a ApiClient, pub(super) String); + +impl<'a> ProblemsForMaintainerRequestBuilder<'a> { + pub fn for_repo(self, repo: String) -> ProblemsForMaintainerAndRepoRequestBuilder<'a> { + ProblemsForMaintainerAndRepoRequestBuilder { + client: self.0, + maintainer: self.1, + repo, + } + } +} + +pub struct ProblemsForMaintainerAndRepoRequestBuilder<'a> { + pub(super) client: &'a ApiClient, + pub(super) maintainer: String, + pub(super) repo: String, +} + + |