diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-04-07 15:12:58 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-04-07 16:55:39 +0200 |
commit | b06c02805b594babd4057817b7645253f8366539 (patch) | |
tree | a7a170341315c238896a45fb70edd43c433256ed | |
parent | af3da6beefbd28c146f998558be0024e1f1ac1a8 (diff) |
Impl ToRequest for ProjectRequestFilteredBuilder
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | librepology/src/v1/api.rs | 84 |
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>), |