diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-06-25 16:00:44 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-09-16 12:27:46 +0200 |
commit | 5ce210127ee09fbc648e2570b9f240446dbbede6 (patch) | |
tree | d06cd9df8d3619f186e57edaea219f33e4748aa8 | |
parent | b8d01488efb514511a837eaff2c678c95384dbb1 (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.rs | 24 |
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), + } } } |