summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-04-07 17:32:27 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-04-07 17:32:27 +0200
commit678442fda0cb58c91a53ddeeca6de5353e472b20 (patch)
treeab20dbcec12b9b87c00ff3c2c25c8a4762d003a4
parent857a27350c88fa2b1acd7d8de34214d736b444da (diff)
Add endpoint API implementation for problems
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--librepology/src/v1/api/client.rs5
-rw-r--r--librepology/src/v1/api/request.rs21
-rw-r--r--librepology/src/v1/api/request_builder.rs34
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,
+}
+
+