summaryrefslogtreecommitdiffstats
path: root/src/package/package.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-10-05 09:45:53 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-10-12 15:19:13 +0200
commitab480d068681ee1a6313943a02877a17441494b8 (patch)
tree88ed07f4df0389e33619a7ed8d5a2f21955806e9 /src/package/package.rs
parent362f80c88234f25de50ca07718ee92a37cd9900c (diff)
Make Package type more powerful
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/package/package.rs')
-rw-r--r--src/package/package.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/package/package.rs b/src/package/package.rs
index ff5cdd9..7cb8bde 100644
--- a/src/package/package.rs
+++ b/src/package/package.rs
@@ -4,6 +4,7 @@ use std::collections::HashMap;
use url::Url;
use getset::Getters;
use serde::Deserialize;
+use anyhow::Result;
use crate::phase::{PhaseName, Phase};
use crate::package::util::*;
@@ -67,6 +68,42 @@ pub struct Package {
phases: Option<HashMap<PhaseName, Phase>>,
}
+impl Package {
+ /// Get all dependencies of the package
+ ///
+ /// Either return the list of dependencies or, if available, run the dependencies_script to
+ /// read the dependencies from there.
+ pub fn get_all_dependencies(&self) -> Result<Vec<(PackageName, PackageVersionConstraint)>> {
+ use std::convert::TryInto;
+
+ // TODO: Current implementation does not run dependency script
+ //
+
+ self.dependencies.iter().map(|d| d.clone().try_into()).collect()
+ }
+}
+
+impl PartialEq for Package {
+ fn eq(&self, other: &Package) -> bool {
+ (self.name(), self.version()).eq(&(other.name(), other.version()))
+ }
+}
+
+impl PartialOrd for Package {
+ fn partial_cmp(&self, other: &Package) -> Option<std::cmp::Ordering> {
+ (self.name(), self.version()).partial_cmp(&(other.name(), other.version()))
+ }
+}
+
+impl Ord for Package {
+ fn cmp(&self, other: &Self) -> std::cmp::Ordering {
+ (self.name(), self.version()).cmp(&(other.name(), other.version()))
+ }
+}
+
+impl Eq for Package {
+}
+
#[derive(Debug, Deserialize)]
pub struct SourceHash {
#[serde(rename = "type")]