diff --git a/serde_derive/src/internals/case.rs b/serde_derive/src/internals/case.rs index 199fd4bcb..554505160 100644 --- a/serde_derive/src/internals/case.rs +++ b/serde_derive/src/internals/case.rs @@ -5,7 +5,7 @@ #[allow(deprecated, unused_imports)] use std::ascii::AsciiExt; -use std::fmt::{self, Display}; +use std::fmt::{self, Debug, Display}; use self::RenameRule::*; @@ -120,11 +120,16 @@ pub struct ParseError<'a> { impl<'a> Display for ParseError<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( - f, - "unknown rename rule for #[serde(rename_all = {:?})]", - self.unknown, - ) + f.write_str("unknown rename rule `rename_all = ")?; + Debug::fmt(self.unknown, f)?; + f.write_str("`, expected one of ")?; + for (i, (name, _rule)) in RENAME_RULES.iter().enumerate() { + if i > 0 { + f.write_str(", ")?; + } + Debug::fmt(name, f)?; + } + Ok(()) } } diff --git a/test_suite/tests/ui/rename/container_unknown_rename_rule.stderr b/test_suite/tests/ui/rename/container_unknown_rename_rule.stderr index 728d71ca2..3fd68f3f3 100644 --- a/test_suite/tests/ui/rename/container_unknown_rename_rule.stderr +++ b/test_suite/tests/ui/rename/container_unknown_rename_rule.stderr @@ -1,4 +1,4 @@ -error: unknown rename rule for #[serde(rename_all = "abc")] +error: unknown rename rule `rename_all = "abc"`, expected one of "lowercase", "UPPERCASE", "PascalCase", "camelCase", "snake_case", "SCREAMING_SNAKE_CASE", "kebab-case", "SCREAMING-KEBAB-CASE" --> $DIR/container_unknown_rename_rule.rs:4:22 | 4 | #[serde(rename_all = "abc")] diff --git a/test_suite/tests/ui/rename/variant_unknown_rename_rule.stderr b/test_suite/tests/ui/rename/variant_unknown_rename_rule.stderr index 7a52f37a8..48f53f893 100644 --- a/test_suite/tests/ui/rename/variant_unknown_rename_rule.stderr +++ b/test_suite/tests/ui/rename/variant_unknown_rename_rule.stderr @@ -1,4 +1,4 @@ -error: unknown rename rule for #[serde(rename_all = "abc")] +error: unknown rename rule `rename_all = "abc"`, expected one of "lowercase", "UPPERCASE", "PascalCase", "camelCase", "snake_case", "SCREAMING_SNAKE_CASE", "kebab-case", "SCREAMING-KEBAB-CASE" --> $DIR/variant_unknown_rename_rule.rs:5:26 | 5 | #[serde(rename_all = "abc")]