Skip to content

Commit 54742ce

Browse files
author
Mukund Lakshman
committed
Use serde's error message option to avoid implementing Deserialize.
1 parent c9ce0ec commit 54742ce

File tree

3 files changed

+7
-80
lines changed

3 files changed

+7
-80
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ percent-encoding = "2.0"
5252
rustfix = "0.5.0"
5353
same-file = "1"
5454
semver = { version = "0.10", features = ["serde"] }
55-
serde = { version = "1.0.82", features = ["derive"] }
55+
serde = { version = "1.0.123", features = ["derive"] }
5656
serde_ignored = "0.1.0"
5757
serde_json = { version = "1.0.30", features = ["raw_value"] }
5858
shell-escape = "0.1.4"

src/cargo/util/toml/mod.rs

+4-77
Original file line numberDiff line numberDiff line change
@@ -419,53 +419,13 @@ impl ser::Serialize for TomlOptLevel {
419419
}
420420
}
421421

422-
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
423-
#[serde(untagged)]
422+
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
423+
#[serde(untagged, expecting = "expected a boolean or an integer")]
424424
pub enum U32OrBool {
425425
U32(u32),
426426
Bool(bool),
427427
}
428428

429-
impl<'de> de::Deserialize<'de> for U32OrBool {
430-
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
431-
where
432-
D: de::Deserializer<'de>,
433-
{
434-
struct Visitor;
435-
436-
impl<'de> de::Visitor<'de> for Visitor {
437-
type Value = U32OrBool;
438-
439-
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
440-
formatter.write_str("a boolean or an integer")
441-
}
442-
443-
fn visit_bool<E>(self, b: bool) -> Result<Self::Value, E>
444-
where
445-
E: de::Error,
446-
{
447-
Ok(U32OrBool::Bool(b))
448-
}
449-
450-
fn visit_i64<E>(self, u: i64) -> Result<Self::Value, E>
451-
where
452-
E: de::Error,
453-
{
454-
Ok(U32OrBool::U32(u as u32))
455-
}
456-
457-
fn visit_u64<E>(self, u: u64) -> Result<Self::Value, E>
458-
where
459-
E: de::Error,
460-
{
461-
Ok(U32OrBool::U32(u as u32))
462-
}
463-
}
464-
465-
deserializer.deserialize_any(Visitor)
466-
}
467-
}
468-
469429
#[derive(Deserialize, Serialize, Clone, Debug, Default, Eq, PartialEq)]
470430
#[serde(default, rename_all = "kebab-case")]
471431
pub struct TomlProfile {
@@ -770,46 +730,13 @@ impl<'de> de::Deserialize<'de> for StringOrVec {
770730
}
771731
}
772732

773-
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
774-
#[serde(untagged)]
733+
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
734+
#[serde(untagged, expecting = "expected a boolean or a string")]
775735
pub enum StringOrBool {
776736
String(String),
777737
Bool(bool),
778738
}
779739

780-
impl<'de> de::Deserialize<'de> for StringOrBool {
781-
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
782-
where
783-
D: de::Deserializer<'de>,
784-
{
785-
struct Visitor;
786-
787-
impl<'de> de::Visitor<'de> for Visitor {
788-
type Value = StringOrBool;
789-
790-
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
791-
formatter.write_str("a boolean or a string")
792-
}
793-
794-
fn visit_bool<E>(self, b: bool) -> Result<Self::Value, E>
795-
where
796-
E: de::Error,
797-
{
798-
Ok(StringOrBool::Bool(b))
799-
}
800-
801-
fn visit_str<E>(self, s: &str) -> Result<Self::Value, E>
802-
where
803-
E: de::Error,
804-
{
805-
Ok(StringOrBool::String(s.to_string()))
806-
}
807-
}
808-
809-
deserializer.deserialize_any(Visitor)
810-
}
811-
}
812-
813740
#[derive(PartialEq, Clone, Debug, Serialize)]
814741
#[serde(untagged)]
815742
pub enum VecStringOrBool {

tests/testsuite/bad_config.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1309,7 +1309,7 @@ fn bad_debuginfo() {
13091309
error: failed to parse manifest at `[..]`
13101310
13111311
Caused by:
1312-
invalid type: string \"a\", expected a boolean or an integer for [..]
1312+
expected a boolean or an integer for [..]
13131313
",
13141314
)
13151315
.run();
@@ -1338,7 +1338,7 @@ fn bad_opt_level() {
13381338
error: failed to parse manifest at `[..]`
13391339
13401340
Caused by:
1341-
invalid type: integer `3`, expected a boolean or a string for key [..]
1341+
expected a boolean or a string for key [..]
13421342
",
13431343
)
13441344
.run();

0 commit comments

Comments
 (0)