Skip to content

Commit e37a04a

Browse files
committed
refactor(schema): Use dedicated type for 'workspace' field value
1 parent 4760ef7 commit e37a04a

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

crates/cargo-util-schemas/src/manifest.rs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -410,11 +410,7 @@ impl<'de> de::Deserialize<'de> for InheritableBtreeMap {
410410
if let Ok(w) = TomlInheritedField::deserialize(
411411
serde_value::ValueDeserializer::<D::Error>::new(value.clone()),
412412
) {
413-
return if w.workspace {
414-
Ok(InheritableField::Inherit(w))
415-
} else {
416-
Err(de::Error::custom("`workspace` cannot be false"))
417-
};
413+
return Ok(InheritableField::Inherit(w));
418414
}
419415
BTreeMap::deserialize(serde_value::ValueDeserializer::<D::Error>::new(value))
420416
.map(InheritableField::Value)
@@ -424,13 +420,14 @@ impl<'de> de::Deserialize<'de> for InheritableBtreeMap {
424420
#[derive(Deserialize, Serialize, Copy, Clone, Debug)]
425421
#[serde(rename_all = "kebab-case")]
426422
pub struct TomlInheritedField {
427-
#[serde(deserialize_with = "bool_no_false")]
428-
workspace: bool,
423+
workspace: WorkspaceValue,
429424
}
430425

431426
impl TomlInheritedField {
432427
pub fn new() -> Self {
433-
TomlInheritedField { workspace: true }
428+
TomlInheritedField {
429+
workspace: WorkspaceValue,
430+
}
434431
}
435432
}
436433

@@ -449,6 +446,28 @@ fn bool_no_false<'de, D: de::Deserializer<'de>>(deserializer: D) -> Result<bool,
449446
}
450447
}
451448

449+
#[derive(Deserialize, Serialize, Copy, Clone, Debug)]
450+
#[serde(try_from = "bool")]
451+
#[serde(into = "bool")]
452+
struct WorkspaceValue;
453+
454+
impl TryFrom<bool> for WorkspaceValue {
455+
type Error = String;
456+
fn try_from(other: bool) -> Result<WorkspaceValue, Self::Error> {
457+
if other {
458+
Ok(WorkspaceValue)
459+
} else {
460+
Err("`workspace` cannot be false".to_owned())
461+
}
462+
}
463+
}
464+
465+
impl From<WorkspaceValue> for bool {
466+
fn from(_: WorkspaceValue) -> bool {
467+
true
468+
}
469+
}
470+
452471
#[derive(Serialize, Clone, Debug)]
453472
#[serde(untagged)]
454473
pub enum InheritableDependency {

0 commit comments

Comments
 (0)