From 4bd3699faba3f00dd8f59a358605abb6e485deb9 Mon Sep 17 00:00:00 2001 From: Sam Scott Date: Sat, 5 Mar 2022 21:19:28 -0600 Subject: Add error message hint for strict mode. --- src/de/mod.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src/de/mod.rs') diff --git a/src/de/mod.rs b/src/de/mod.rs index c3f9e40..6f71b95 100644 --- a/src/de/mod.rs +++ b/src/de/mod.rs @@ -200,7 +200,7 @@ enum Level<'a> { OrderedSeq(BTreeMap>), Sequence(Vec>), Flat(Cow<'a, str>), - Invalid(&'static str), + Invalid(String), Uninitialised, } @@ -335,9 +335,21 @@ impl<'de> de::MapAccess<'de> for QsDeserializer<'de> { { if let Some((key, value)) = self.iter.next() { self.value = Some(value); - return seed.deserialize(ParsableStringDeserializer(key)).map(Some); - }; - Ok(None) + let has_bracket = key.contains('['); + seed.deserialize(ParsableStringDeserializer(key)) + .map(Some) + .map_err(|e| { + if has_bracket { + de::Error::custom( + format!("{}\nInvalid field contains an encoded bracket -- did you mean to use non-strict mode?\n https://docs.rs/serde_qs/latest/serde_qs/#strict-vs-non-strict-modes", e,) + ) + } else { + e + } + }) + } else { + Ok(None) + } } fn next_value_seed(&mut self, seed: V) -> Result @@ -348,8 +360,7 @@ impl<'de> de::MapAccess<'de> for QsDeserializer<'de> { seed.deserialize(LevelDeserializer(v)) } else { Err(de::Error::custom( - "Somehow the list was empty after a \ - non-empty key was returned", + "Somehow the map was empty after a non-empty key was returned", )) } } @@ -424,7 +435,8 @@ impl<'de> de::EnumAccess<'de> for LevelDeserializer<'de> { LevelDeserializer(Level::Invalid( "this value can only \ deserialize to a \ - UnitVariant", + UnitVariant" + .to_string(), )), )), _ => Err(de::Error::custom( -- cgit v1.2.3