From 1d7dd070642bc826dca28bf22f70bd967775413b Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 25 Jun 2021 16:00:44 +0200 Subject: 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 --- src/package/dependency/runtime.rs | 22 +++++++++++++++------- 1 file 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 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 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), + } } } -- cgit v1.2.3