diff options
Diffstat (limited to 'librepology')
-rw-r--r-- | librepology/.gitignore | 1 | ||||
-rw-r--r-- | librepology/Cargo.toml | 9 | ||||
-rw-r--r-- | librepology/src/lib.rs | 9 | ||||
-rw-r--r-- | librepology/src/packagefilters.rs | 81 | ||||
-rw-r--r-- | librepology/src/v1/restapi.rs | 5 | ||||
-rw-r--r-- | librepology/src/v1/types/package.rs | 38 |
6 files changed, 41 insertions, 102 deletions
diff --git a/librepology/.gitignore b/librepology/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/librepology/.gitignore @@ -0,0 +1 @@ +target diff --git a/librepology/Cargo.toml b/librepology/Cargo.toml index 7dadd2f..51afe45 100644 --- a/librepology/Cargo.toml +++ b/librepology/Cargo.toml @@ -11,7 +11,6 @@ readme = "./README.md" keywords = ["api", "repology"] categories = ["data-structures", "api-bindings"] license = "MPL-2.0" -license-file = "./LICENSE" [badges] maintenance = { status = "actively-developed" } @@ -25,12 +24,6 @@ url_serde = "0.2" failure = "0.1" log = "0.4" derive_more = "0.14" +derive-new = "0.5" curl = "0.4" -filters = { version = "0.3", optional = true } -derive-new = { version = "0.5", optional = true } - -[features] -# By default, we include the filters functionality -default = [ "packagefilters" ] -packagefilters = ["filters", "derive-new"] diff --git a/librepology/src/lib.rs b/librepology/src/lib.rs index 76992fd..d0904a4 100644 --- a/librepology/src/lib.rs +++ b/librepology/src/lib.rs @@ -5,16 +5,9 @@ extern crate url; extern crate url_serde; extern crate curl; -#[cfg(feature = "packagefilters")] -extern crate filters; -#[cfg(feature = "packagefilters")] -#[macro_use] extern crate derive_new; - #[macro_use] extern crate serde_derive; #[macro_use] extern crate log; #[macro_use] extern crate derive_more; +#[macro_use] extern crate derive_new; pub mod v1; - -#[cfg(feature = "packagefilters")] -pub mod packagefilters; diff --git a/librepology/src/packagefilters.rs b/librepology/src/packagefilters.rs deleted file mode 100644 index d1293d4..0000000 --- a/librepology/src/packagefilters.rs +++ /dev/null @@ -1,81 +0,0 @@ -use filters::filter::Filter; - -use crate::v1::types::{Package, Repo, Name, Status, Version, License, Maintainer}; - - -#[derive(new, Debug)] -pub struct PackageRepoNameFilter(Repo); - -/// Filter implementation for PackageRepoNameFilter -/// -/// filters based on _equality_! -impl Filter<Package> for PackageRepoNameFilter { - fn filter(&self, package: &Package) -> bool { - self.0 == *package.repo() - } -} - - -#[derive(new, Debug)] -pub struct PackageNameFilter(Name); - -/// Filter implementation for PackageNameFilter -/// -/// filters based on _equality_! -impl Filter<Package> for PackageNameFilter { - fn filter(&self, package: &Package) -> bool { - self.0 == *package.name() - } -} - - -#[derive(new, Debug)] -pub struct PackageVersionFilter(Version); - -/// Filter implementation for PackageVersionFilter -/// -/// filters based on _equality_! -impl Filter<Package> for PackageVersionFilter { - fn filter(&self, package: &Package) -> bool { - self.0 == *package.version() - } -} - - -#[derive(new, Debug)] -pub struct PackageStatusFilter(Status); - -/// Filter implementation for PackageStatusFilter -/// -/// filters based on _equality_! -impl Filter<Package> for PackageStatusFilter { - fn filter(&self, package: &Package) -> bool { - package.status().map(|s| self.0 == *s).unwrap_or(false) - } -} - - -#[derive(new, Debug)] -pub struct PackageLicenseFilter(License); - -/// Filter implementation for PackageLicenseFilter -/// -/// filters based on _equality_! -impl Filter<Package> for PackageLicenseFilter { - fn filter(&self, package: &Package) -> bool { - package.licenses().map(|lcs| lcs.iter().any(|l| self.0 == *l)).unwrap_or(false) - } -} - - -#[derive(new, Debug)] -pub struct PackageMaintainerFilter(Maintainer); - -/// Filter implementation for PackageMaintainerFilter -/// -/// filters based on _equality_! -impl Filter<Package> for PackageMaintainerFilter { - fn filter(&self, package: &Package) -> bool { - package.maintainers().map(|mts| mts.iter().any(|m| self.0 == *m)).unwrap_or(false) - } -} diff --git a/librepology/src/v1/restapi.rs b/librepology/src/v1/restapi.rs index bc1a693..1e8711c 100644 --- a/librepology/src/v1/restapi.rs +++ b/librepology/src/v1/restapi.rs @@ -42,17 +42,20 @@ impl Api for RestApi { fn project<N: AsRef<str>>(&self, name: N) -> Result<Vec<Package>> { let url = format!("{}api/v1/project/{}", self.repology, name.as_ref()); + trace!("Request: {}", url); 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 url = format!("{}api/v1/repository/{}/problems", self.repology, repo.as_ref()); + trace!("Request: {}", url); 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 url = format!("{}api/v1/maintainer/{}/problems", self.repology, maintainer.as_ref()); + trace!("Request: {}", url); serde_json::from_str(&self.send_request(url)?).map_err(Error::from) } -}
\ No newline at end of file +} diff --git a/librepology/src/v1/types/package.rs b/librepology/src/v1/types/package.rs index fc66faa..4623fd3 100644 --- a/librepology/src/v1/types/package.rs +++ b/librepology/src/v1/types/package.rs @@ -5,8 +5,17 @@ pub struct Package { /// name of repository for this package repo: Repo, - /// name - name: Name, + /// package name(s) as used in repository - generic one and/or source package name and/or binary package name, whichever is applicable + name: Option<Name>, + + /// package name(s) as used in repository - generic one and/or source package name and/or binary package name, whichever is applicable + srcname: Option<Name>, + + /// package name(s) as used in repository - generic one and/or source package name and/or binary package name, whichever is applicable + binname: Option<Name>, + + /// package name as shown to the user by Repology + visiblename: Option<Name>, /// version version: Version, @@ -35,8 +44,29 @@ impl Package { &self.repo } - pub fn name(&self) -> &Name { - &self.name + pub fn name(&self) -> Option<&Name> { + self.name.as_ref() + } + + pub fn srcname(&self) -> Option<&Name> { + self.srcname.as_ref() + } + + pub fn binname(&self) -> Option<&Name> { + self.binname.as_ref() + } + + pub fn visiblename(&self) -> Option<&Name> { + self.visiblename.as_ref() + } + + /// Get name, srcname, binname or visiblename, whatever is set + /// (in this order) + pub fn any_name(&self) -> Option<&Name> { + self.name() + .or_else(|| self.srcname()) + .or_else(|| self.binname()) + .or_else(|| self.visiblename()) } pub fn version(&self) -> &Version { |