From 7db0982e582399f1ffaa5128fc7a71d4764d9998 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 23 Jan 2021 14:09:58 -0800 Subject: [PATCH] Add error type to use for RenameRule parsing --- serde_derive/src/internals/attr.rs | 12 ++++++------ serde_derive/src/internals/case.rs | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/serde_derive/src/internals/attr.rs b/serde_derive/src/internals/attr.rs index c2caf057..cea79663 100644 --- a/serde_derive/src/internals/attr.rs +++ b/serde_derive/src/internals/attr.rs @@ -339,7 +339,7 @@ impl Container { rename_all_ser_rule.set(&m.path, rename_rule); rename_all_de_rule.set(&m.path, rename_rule); } - Err(()) => cx.error_spanned_by( + Err(_err) => cx.error_spanned_by( s, format!( "unknown rename rule for #[serde(rename_all = {:?})]", @@ -356,7 +356,7 @@ impl Container { if let Some(ser) = ser { match RenameRule::from_str(&ser.value()) { Ok(rename_rule) => rename_all_ser_rule.set(&m.path, rename_rule), - Err(()) => cx.error_spanned_by( + Err(_err) => cx.error_spanned_by( ser, format!( "unknown rename rule for #[serde(rename_all = {:?})]", @@ -368,7 +368,7 @@ impl Container { if let Some(de) = de { match RenameRule::from_str(&de.value()) { Ok(rename_rule) => rename_all_de_rule.set(&m.path, rename_rule), - Err(()) => cx.error_spanned_by( + Err(_err) => cx.error_spanned_by( de, format!( "unknown rename rule for #[serde(rename_all = {:?})]", @@ -930,7 +930,7 @@ impl Variant { rename_all_ser_rule.set(&m.path, rename_rule); rename_all_de_rule.set(&m.path, rename_rule); } - Err(()) => cx.error_spanned_by( + Err(_err) => cx.error_spanned_by( s, format!( "unknown rename rule for #[serde(rename_all = {:?})]", @@ -947,7 +947,7 @@ impl Variant { if let Some(ser) = ser { match RenameRule::from_str(&ser.value()) { Ok(rename_rule) => rename_all_ser_rule.set(&m.path, rename_rule), - Err(()) => cx.error_spanned_by( + Err(_err) => cx.error_spanned_by( ser, format!( "unknown rename rule for #[serde(rename_all = {:?})]", @@ -959,7 +959,7 @@ impl Variant { if let Some(de) = de { match RenameRule::from_str(&de.value()) { Ok(rename_rule) => rename_all_de_rule.set(&m.path, rename_rule), - Err(()) => cx.error_spanned_by( + Err(_err) => cx.error_spanned_by( de, format!( "unknown rename rule for #[serde(rename_all = {:?})]", diff --git a/serde_derive/src/internals/case.rs b/serde_derive/src/internals/case.rs index 4e8a732d..d9634e73 100644 --- a/serde_derive/src/internals/case.rs +++ b/serde_derive/src/internals/case.rs @@ -34,7 +34,7 @@ pub enum RenameRule { } impl RenameRule { - pub fn from_str(rename_all_str: &str) -> Result { + pub fn from_str(rename_all_str: &str) -> Result { match rename_all_str { "lowercase" => Ok(LowerCase), "UPPERCASE" => Ok(UPPERCASE), @@ -44,7 +44,7 @@ impl RenameRule { "SCREAMING_SNAKE_CASE" => Ok(ScreamingSnakeCase), "kebab-case" => Ok(KebabCase), "SCREAMING-KEBAB-CASE" => Ok(ScreamingKebabCase), - _ => Err(()), + unknown => Err(ParseError { unknown }), } } @@ -104,6 +104,10 @@ impl RenameRule { } } +pub struct ParseError<'a> { + unknown: &'a str, +} + #[test] fn rename_variants() { for &(original, lower, upper, camel, snake, screaming, kebab, screaming_kebab) in &[