diff options
Diffstat (limited to 'src/package')
-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), + } } } |