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:28:07 +0200 |
commit | 1d7dd070642bc826dca28bf22f70bd967775413b (patch) | |
tree | 48300e31dd962d9562dcb87b6129c00218a1f4e9 /src | |
parent | ef10100c0152ef12ee77aaae966ff9a603a36a0d (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>
Diffstat (limited to 'src')
-rw-r--r-- | src/package/dependency/runtime.rs | 22 |
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), + } } } |