diff options
Diffstat (limited to 'librepology/src/v1/restapi.rs')
-rw-r--r-- | librepology/src/v1/restapi.rs | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/librepology/src/v1/restapi.rs b/librepology/src/v1/restapi.rs index df26135..bc1a693 100644 --- a/librepology/src/v1/restapi.rs +++ b/librepology/src/v1/restapi.rs @@ -7,6 +7,7 @@ use curl::easy::Easy2; use crate::v1::types::{Package, Problem}; use crate::v1::api::Api; +/// Private helper type for collecting data from the curl library struct Collector(Vec<u8>); impl curl::easy::Handler for Collector { fn write(&mut self, data: &[u8]) -> RResult<usize, curl::easy::WriteError> { @@ -15,6 +16,7 @@ impl curl::easy::Handler for Collector { } } +/// Representational object for the REST Api of repology pub struct RestApi { /// Base url repology: String, @@ -25,6 +27,7 @@ impl RestApi { Self { repology } } + /// Helper function for sending a request via the curl library fn send_request<U: AsRef<str>>(&self, request: U) -> Result<String> { let mut easy = Easy2::new(Collector(Vec::new())); easy.get(true)?; @@ -38,30 +41,18 @@ impl RestApi { impl Api for RestApi { fn project<N: AsRef<str>>(&self, name: N) -> Result<Vec<Package>> { - let request_url = format!("{}api/v1/project/{}", self.repology, name.as_ref()); - - self.send_request(request_url) - .and_then(|r| { - serde_json::from_str(&r).map_err(Error::from) - }) + let url = format!("{}api/v1/project/{}", self.repology, name.as_ref()); + serde_json::from_str(&self.send_request(url)?).map_err(Error::from) } fn problems_for_repo<R: AsRef<str>>(&self, repo: R) -> Result<Vec<Problem>> { - let request_url = format!("{}api/v1/repository/{}/problems", self.repology, repo.as_ref()); - - self.send_request(request_url) - .and_then(|r| { - serde_json::from_str(&r).map_err(Error::from) - }) + let url = format!("{}api/v1/repository/{}/problems", self.repology, repo.as_ref()); + serde_json::from_str(&self.send_request(url)?).map_err(Error::from) } fn problems_for_maintainer<M: AsRef<str>>(&self, maintainer: M) -> Result<Vec<Problem>> { - let request_url = format!("{}api/v1/maintainer/{}/problems", self.repology, maintainer.as_ref()); - - self.send_request(request_url) - .and_then(|r| { - serde_json::from_str(&r).map_err(Error::from) - }) + let url = format!("{}api/v1/maintainer/{}/problems", self.repology, maintainer.as_ref()); + serde_json::from_str(&self.send_request(url)?).map_err(Error::from) } }
\ No newline at end of file |