impl workspace hint for boolean dependencies

hint for only bad dependency true literal and rename unit test to match
This commit is contained in:
Samuel Onoja 2025-05-09 04:24:04 +01:00
parent 7e78c54630
commit 5dd597b621
No known key found for this signature in database
2 changed files with 21 additions and 5 deletions

View File

@ -787,12 +787,26 @@ impl<'de, P: Deserialize<'de> + Clone> de::Deserialize<'de> for TomlDependency<P
where
D: de::Deserializer<'de>,
{
use serde::de::Error as _;
let expected = "a version string like \"0.9.8\" or a \
detailed dependency like { version = \"0.9.8\" }";
UntaggedEnumVisitor::new()
.expecting(
"a version string like \"0.9.8\" or a \
detailed dependency like { version = \"0.9.8\" }",
)
.expecting(expected)
.string(|value| Ok(TomlDependency::Simple(value.to_owned())))
.bool(|value| {
let expected = format!("invalid type: boolean `{value}`, expected {expected}");
let err = if value {
format!(
"{expected}\n\
note: if you meant to use a workspace member, you can write\n \
dep.workspace = {value}"
)
} else {
expected
};
Err(serde_untagged::de::Error::custom(err))
})
.map(|value| value.deserialize().map(TomlDependency::Detailed))
.deserialize(deserializer)
}

View File

@ -2642,7 +2642,7 @@ fn bad_dependency() {
}
#[cargo_test]
fn bad_boolean_dependency() {
fn bad_dependency_true_literal() {
let p = project()
.file(
"Cargo.toml",
@ -2664,6 +2664,8 @@ fn bad_boolean_dependency() {
.with_status(101)
.with_stderr_data(str![[r#"
[ERROR] invalid type: boolean `true`, expected a version string like "0.9.8" or a detailed dependency like { version = "0.9.8" }
[NOTE] if you meant to use a workspace member, you can write
dep.workspace = true
--> Cargo.toml:9:23
|
9 | bar = true