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:27:46 +0200
commit5ce210127ee09fbc648e2570b9f240446dbbede6 (patch)
treed06cd9df8d3619f186e57edaea219f33e4748aa8
parentb8d01488efb514511a837eaff2c678c95384dbb1 (diff)
Rewrite BuildDependency type as enum
This patch reimplements the BuildDependency 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 build = [ { 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/build.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/package/dependency/build.rs b/src/package/dependency/build.rs
index 4fb9f74..78d3fad 100644
--- a/src/package/dependency/build.rs
+++ b/src/package/dependency/build.rs
@@ -19,24 +19,30 @@ use crate::package::PackageVersionConstraint;
/// A dependency that is packaged and is only required during build time
#[derive(Serialize, Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)]
-#[serde(transparent)]
-pub struct BuildDependency(String);
+#[serde(untagged)]
+pub enum BuildDependency {
+ Simple(String),
+}
impl AsRef<str> for BuildDependency {
fn as_ref(&self) -> &str {
- self.0.as_ref()
+ match self {
+ BuildDependency::Simple(name) => name,
+ }
}
}
impl StringEqual for BuildDependency {
fn str_equal(&self, s: &str) -> bool {
- self.0 == s
+ match self {
+ BuildDependency::Simple(name) => name == s,
+ }
}
}
impl ParseDependency for BuildDependency {
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())
}
}
@@ -52,10 +58,10 @@ mod tests {
#[test]
fn test_parse_dependency() {
- let dependency_str = r#"setting = "foo""#;
- let d: TestSetting = toml::from_str(dependency_str).unwrap();
-
- assert_eq!(d.setting.0, "foo");
+ let s: TestSetting = toml::from_str(r#"setting = "foo""#).expect("Parsing TestSetting failed");
+ match s.setting {
+ BuildDependency::Simple(name) => assert_eq!(name, "foo", "Expected 'foo', got {}", name),
+ }
}
}