From ed04824f1054a7eb65a7618cb5b844fa7065499b Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 23 Jan 2021 14:07:49 -0800 Subject: [PATCH] Move RenameRule parse from trait fn to associated This will allow updating it to return an Err that borrows the input string, which is not possible with FromStr. --- serde_derive/src/internals/attr.rs | 1 - serde_derive/src/internals/case.rs | 34 ++++++++++++------------------ 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/serde_derive/src/internals/attr.rs b/serde_derive/src/internals/attr.rs index 14e1625d..c2caf057 100644 --- a/serde_derive/src/internals/attr.rs +++ b/serde_derive/src/internals/attr.rs @@ -4,7 +4,6 @@ use proc_macro2::{Group, Span, TokenStream, TokenTree}; use quote::ToTokens; use std::borrow::Cow; use std::collections::BTreeSet; -use std::str::FromStr; use syn; use syn::parse::{self, Parse, ParseStream}; use syn::punctuated::Punctuated; diff --git a/serde_derive/src/internals/case.rs b/serde_derive/src/internals/case.rs index 3fcbb32d..4e8a732d 100644 --- a/serde_derive/src/internals/case.rs +++ b/serde_derive/src/internals/case.rs @@ -5,8 +5,6 @@ #[allow(deprecated, unused_imports)] use std::ascii::AsciiExt; -use std::str::FromStr; - use self::RenameRule::*; /// The different possible ways to change case of fields in a struct, or variants in an enum. @@ -36,6 +34,20 @@ pub enum RenameRule { } impl RenameRule { + pub fn from_str(rename_all_str: &str) -> Result { + match rename_all_str { + "lowercase" => Ok(LowerCase), + "UPPERCASE" => Ok(UPPERCASE), + "PascalCase" => Ok(PascalCase), + "camelCase" => Ok(CamelCase), + "snake_case" => Ok(SnakeCase), + "SCREAMING_SNAKE_CASE" => Ok(ScreamingSnakeCase), + "kebab-case" => Ok(KebabCase), + "SCREAMING-KEBAB-CASE" => Ok(ScreamingKebabCase), + _ => Err(()), + } + } + /// Apply a renaming rule to an enum variant, returning the version expected in the source. pub fn apply_to_variant(&self, variant: &str) -> String { match *self { @@ -92,24 +104,6 @@ impl RenameRule { } } -impl FromStr for RenameRule { - type Err = (); - - fn from_str(rename_all_str: &str) -> Result { - match rename_all_str { - "lowercase" => Ok(LowerCase), - "UPPERCASE" => Ok(UPPERCASE), - "PascalCase" => Ok(PascalCase), - "camelCase" => Ok(CamelCase), - "snake_case" => Ok(SnakeCase), - "SCREAMING_SNAKE_CASE" => Ok(ScreamingSnakeCase), - "kebab-case" => Ok(KebabCase), - "SCREAMING-KEBAB-CASE" => Ok(ScreamingKebabCase), - _ => Err(()), - } - } -} - #[test] fn rename_variants() { for &(original, lower, upper, camel, snake, screaming, kebab, screaming_kebab) in &[