summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-06-25 16:00:44 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-09-16 12:28:07 +0200
commit1d7dd070642bc826dca28bf22f70bd967775413b (patch)
tree48300e31dd962d9562dcb87b6129c00218a1f4e9
parentef10100c0152ef12ee77aaae966ff9a603a36a0d (diff)
Rewrite Dependency type as enum
This patch reimplements the Dependency type as an enum. This is required because later we want to be able to use an "if" expression in the build dependencies, for example (not decided yet) something like runtime = [ { d = "libfoobar", if = [ { has_env = [ "TARGET_RH7" ]; } ] } ] (no valid toml here, formatting for readability) to make a dependency optional on a condition. Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r--src/package/dependency/runtime.rs22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/package/dependency/runtime.rs b/src/package/dependency/runtime.rs
index 50e96de..3916b22 100644
--- a/src/package/dependency/runtime.rs
+++ b/src/package/dependency/runtime.rs
@@ -19,30 +19,36 @@ use crate::package::PackageVersionConstraint;
/// A dependency that is packaged and is required during runtime
#[derive(Serialize, Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)]
-#[serde(transparent)]
-pub struct Dependency(String);
+#[serde(untagged)]
+pub enum Dependency {
+ Simple(String),
+}
impl AsRef<str> for Dependency {
fn as_ref(&self) -> &str {
- self.0.as_ref()
+ match self {
+ Dependency::Simple(name) => name,
+ }
}
}
impl StringEqual for Dependency {
fn str_equal(&self, s: &str) -> bool {
- self.0 == s
+ match self {
+ Dependency::Simple(name) => name == s,
+ }
}
}
impl From<String> for Dependency {
fn from(s: String) -> Dependency {
- Dependency(s)
+ Dependency::Simple(s)
}
}
impl ParseDependency for Dependency {
fn parse_as_name_and_version(&self) -> Result<(PackageName, PackageVersionConstraint)> {
- crate::package::dependency::parse_package_dependency_string_into_name_and_version(&self.0)
+ crate::package::dependency::parse_package_dependency_string_into_name_and_version(self.as_ref())
}
}
@@ -60,7 +66,9 @@ mod tests {
fn test_parse_dependency() {
let s: TestSetting = toml::from_str(r#"setting = "foo""#).expect("Parsing TestSetting failed");
- assert_eq!(s.setting.0, "foo");
+ match s.setting {
+ Dependency::Simple(name) => assert_eq!(name, "foo", "Expected 'foo', got {}", name),
+ }
}
}