From 5ce210127ee09fbc648e2570b9f240446dbbede6 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 25 Jun 2021 16:00:44 +0200 Subject: 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 --- src/package/dependency/build.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src/package') 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 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), + } } } -- cgit v1.2.3