diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-01-13 21:08:09 -0500 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-01-13 21:08:09 -0500 |
commit | 9838daa8187e138da3eeb0c317edb010c7eda67a (patch) | |
tree | 8b1c226b22b90d8abcd291f5e40a6af6c28f57f0 | |
parent | a16bdebab35742037205ca5ddb5e0e2928fa49a9 (diff) |
resolve all dependencies
-rw-r--r-- | src/lib.rs | 44 |
1 files changed, 27 insertions, 17 deletions
@@ -18,6 +18,8 @@ pub struct PackageMeta { pub depends: Option<Vec<String>>, #[serde(alias = "MakeDepends")] pub make_depends: Option<Vec<String>>, + #[serde(alias = "CheckDepends")] + pub check_depends: Option<Vec<String>>, } pub enum Dependency { @@ -74,26 +76,34 @@ impl PackageMeta { if let Some(depends) = &self.depends { for dep in depends { - let dependency = alpm.syncdbs().find_satisfier(dep.clone()); - match dependency { - Some(d) => { - dependencies.push(Dependency::Official(d.name().to_string())); - } - None => { - let aur_package = aur.iter().find(|p| p.name == *dep); - match aur_package { - Some(p) => { - dependencies.push(Dependency::AUR(p.clone())); - } - None => { - dependencies.push(Dependency::NotFound(dep.clone())); - } - } - } - } + dependencies.push(resolve_dep(dep, alpm, aur)); + } + } + if let Some(depends) = &self.make_depends { + for dep in depends { + dependencies.push(resolve_dep(dep, alpm, aur)); + } + } + if let Some(depends) = &self.check_depends { + for dep in depends { + dependencies.push(resolve_dep(dep, alpm, aur)); } } dependencies } } + +fn resolve_dep(dep: &str, alpm: &Alpm, aur: &Vec<PackageMeta>) -> Dependency { + let dependency = alpm.syncdbs().find_satisfier(dep.to_string()); + match dependency { + Some(d) => Dependency::Official(d.name().to_string()), + None => { + let aur_package = aur.iter().find(|p| p.name == dep); + match aur_package { + Some(p) => Dependency::AUR(p.clone()), + None => Dependency::NotFound(dep.to_string()), + } + } + } +}
\ No newline at end of file |