From e37a04a9d420787312229d858090004516423c89 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 8 Jan 2024 09:06:03 -0600 Subject: [PATCH] refactor(schema): Use dedicated type for 'workspace' field value --- crates/cargo-util-schemas/src/manifest.rs | 35 +++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/crates/cargo-util-schemas/src/manifest.rs b/crates/cargo-util-schemas/src/manifest.rs index 0bf921418..2c0048d8b 100644 --- a/crates/cargo-util-schemas/src/manifest.rs +++ b/crates/cargo-util-schemas/src/manifest.rs @@ -410,11 +410,7 @@ impl<'de> de::Deserialize<'de> for InheritableBtreeMap { if let Ok(w) = TomlInheritedField::deserialize( serde_value::ValueDeserializer::::new(value.clone()), ) { - return if w.workspace { - Ok(InheritableField::Inherit(w)) - } else { - Err(de::Error::custom("`workspace` cannot be false")) - }; + return Ok(InheritableField::Inherit(w)); } BTreeMap::deserialize(serde_value::ValueDeserializer::::new(value)) .map(InheritableField::Value) @@ -424,13 +420,14 @@ impl<'de> de::Deserialize<'de> for InheritableBtreeMap { #[derive(Deserialize, Serialize, Copy, Clone, Debug)] #[serde(rename_all = "kebab-case")] pub struct TomlInheritedField { - #[serde(deserialize_with = "bool_no_false")] - workspace: bool, + workspace: WorkspaceValue, } impl TomlInheritedField { pub fn new() -> Self { - TomlInheritedField { workspace: true } + TomlInheritedField { + workspace: WorkspaceValue, + } } } @@ -449,6 +446,28 @@ fn bool_no_false<'de, D: de::Deserializer<'de>>(deserializer: D) -> Result for WorkspaceValue { + type Error = String; + fn try_from(other: bool) -> Result { + if other { + Ok(WorkspaceValue) + } else { + Err("`workspace` cannot be false".to_owned()) + } + } +} + +impl From for bool { + fn from(_: WorkspaceValue) -> bool { + true + } +} + #[derive(Serialize, Clone, Debug)] #[serde(untagged)] pub enum InheritableDependency {