diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-01-14 11:04:38 -0500 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-01-14 11:04:38 -0500 |
commit | b31143d7a0f6f3fd956e49eb4c3fe80699fe001b (patch) | |
tree | 2405a29482baf65cd66d268c70f0fe83eab19501 | |
parent | c99bfa0addb9aa11bdaa3c228127b590430047d4 (diff) |
resolve aur-provided dependency libraries as well
-rw-r--r-- | src/lib.rs | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -14,6 +14,8 @@ pub struct PackageMeta { pub version: String, #[serde(alias = "Description")] pub description: Option<String>, + #[serde(alias = "Provides")] + pub provides: Option<Vec<String>>, #[serde(alias = "Popularity")] pub popularity: f64, #[serde(alias = "Depends")] @@ -22,6 +24,8 @@ pub struct PackageMeta { pub make_depends: Option<Vec<String>>, #[serde(alias = "CheckDepends")] pub check_depends: Option<Vec<String>>, + #[serde(alias = "OptDepends")] + pub opt_depends: Option<Vec<String>>, } #[derive(Debug)] @@ -92,6 +96,11 @@ impl PackageMeta { dependencies.push(resolve_dep(dep, alpm, aur)); } } + if let Some(depends) = &self.opt_depends { + for dep in depends { + dependencies.push(resolve_dep(dep, alpm, aur)); + } + } dependencies } @@ -102,7 +111,9 @@ fn resolve_dep(dep: &str, alpm: &Alpm, aur: &[PackageMeta]) -> Dependency { match dependency { Some(d) => Dependency::Official(d.name().to_string()), None => { - let aur_package = aur.iter().find(|p| p.name == dep); + let aur_package = aur.iter().find(|p| { + p.name == dep || (p.provides.is_some() && p.provides.as_ref().unwrap().contains(&dep.to_owned())) + }); match aur_package { Some(p) => Dependency::AUR(p.clone()), None => Dependency::NotFound(dep.to_string()), |