summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-04-07 15:12:58 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-04-07 16:55:39 +0200
commitb06c02805b594babd4057817b7645253f8366539 (patch)
treea7a170341315c238896a45fb70edd43c433256ed
parentaf3da6beefbd28c146f998558be0024e1f1ac1a8 (diff)
Impl ToRequest for ProjectRequestFilteredBuilder
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--librepology/src/v1/api.rs84
1 files changed, 84 insertions, 0 deletions
diff --git a/librepology/src/v1/api.rs b/librepology/src/v1/api.rs
index a090249..4ef0d12 100644
--- a/librepology/src/v1/api.rs
+++ b/librepology/src/v1/api.rs
@@ -139,6 +139,90 @@ impl<'a> ProjectRequestFilteredBuilder<'a> {
}
+impl<'a> ToRequest<'a> for ProjectRequestFilteredBuilder<'a> {
+ fn to_request(self) -> Request<'a> {
+ let mut buf = Vec::new();
+
+ if let Some(search) = self.search.as_ref() {
+ let s = format!("search={}", search);
+ buf.push(s);
+ }
+
+ if let Some(category) = self.category.as_ref() {
+ let s = format!("category={}", category);
+ buf.push(s);
+ }
+
+ if let Some(in_repo_filter) = self.in_repo_filter.as_ref() {
+ let s = format!("in_repo_filter={}", in_repo_filter);
+ buf.push(s);
+ }
+
+ if let Some(not_in_repo_filter) = self.not_in_repo_filter.as_ref() {
+ let s = format!("not_in_repo_filter={}", not_in_repo_filter);
+ buf.push(s);
+ }
+
+ if let Some(repos_filter) = self.repos_filter.as_ref() {
+ match repos_filter {
+ NumberOrRange::Number(u) => {
+ let s = format!("repos={}", u);
+ buf.push(s);
+ },
+ NumberOrRange::Range(None, None) => {
+ // nothing, because there is no range
+ },
+ NumberOrRange::Range(Some(a), None) => {
+ let s = format!("repos={}-", a);
+ buf.push(s);
+ },
+ NumberOrRange::Range(None, Some(b)) => {
+ let s = format!("repos=-{}", b);
+ buf.push(s);
+ },
+ NumberOrRange::Range(Some(a), Some(b)) => {
+ let s = format!("repos={}-{}", a, b);
+ buf.push(s);
+ },
+ }
+ }
+
+ if let Some(families_filter) = self.families_filter.as_ref() {
+ let s = format!("families={}", families_filter);
+ buf.push(s);
+ }
+
+ if let Some(newest) = self.newest.as_ref() {
+ if *newest {
+ buf.push(String::from("newest=1"));
+ } else {
+ buf.push(String::from("newest=0"));
+ }
+ }
+
+ if let Some(outdated) = self.outdated.as_ref() {
+ if *outdated {
+ buf.push(String::from("newest=1"));
+ } else {
+ buf.push(String::from("newest=0"));
+ }
+ }
+
+ if let Some(problematic) = self.problematic.as_ref() {
+ if *problematic {
+ buf.push(String::from("newest=1"));
+ } else {
+ buf.push(String::from("newest=0"));
+ }
+ }
+
+ Request {
+ client: self.client,
+ request_string: format!("&{}", buf.join("&")),
+ }
+ }
+}
+
pub enum NumberOrRange {
Number(usize),
Range(Option<usize>, Option<usize>),