diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-06-29 13:53:54 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-06-29 13:53:54 +0800 |
| commit | faae53e760743971c43800f6e6bc2fcbaec582b7 (patch) | |
| tree | 50198701d8ac9211fefd1c7cf6f5d92718afc0c8 /mingling_macros/src/pack_err.rs | |
| parent | fc41f3e2db0db8e672fc09f786f9b0bf02029b52 (diff) | |
refactor(pack_err): replace inline to_snake_case with just_fmt
Diffstat (limited to 'mingling_macros/src/pack_err.rs')
| -rw-r--r-- | mingling_macros/src/pack_err.rs | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/mingling_macros/src/pack_err.rs b/mingling_macros/src/pack_err.rs index 5f3c447..ba7cf17 100644 --- a/mingling_macros/src/pack_err.rs +++ b/mingling_macros/src/pack_err.rs @@ -1,36 +1,8 @@ +use just_fmt::snake_case; use proc_macro::TokenStream; use quote::quote; use syn::{Ident, Token, Type, parse_macro_input}; -/// Converts a PascalCase/UpperCamelCase identifier string to snake_case. -/// -/// Examples: -/// - `ErrorNotFound` → `"error_not_found"` -/// - `ErrorNotDir` → `"error_not_dir"` -/// - `FileIO` → `"file_io"` -/// - `XMLParser` → `"xml_parser"` -fn to_snake_case(ident: &str) -> String { - let mut result = String::new(); - let mut prev_is_upper = false; - - for (i, c) in ident.chars().enumerate() { - if c.is_uppercase() { - if i > 0 && !prev_is_upper { - result.push('_'); - } - for lower_c in c.to_lowercase() { - result.push(lower_c); - } - prev_is_upper = true; - } else { - result.push(c); - prev_is_upper = false; - } - } - - result -} - enum PackErrInput { /// pack_err!(ErrorNotFound) Simple { type_name: Ident }, @@ -65,7 +37,7 @@ pub fn pack_err(input: TokenStream) -> TokenStream { match parsed { PackErrInput::Simple { type_name } => { let name_str = type_name.to_string(); - let snake_name = to_snake_case(&name_str); + let snake_name = snake_case!(&name_str); // Note: No longer derives Serialize under structural_renderer. // Use pack_err_structural for structured output support. @@ -98,7 +70,7 @@ pub fn pack_err(input: TokenStream) -> TokenStream { inner_type, } => { let name_str = type_name.to_string(); - let snake_name = to_snake_case(&name_str); + let snake_name = snake_case!(&name_str); // Note: No longer derives Serialize under structural_renderer. // Use pack_err_structural for structured output support. @@ -175,7 +147,7 @@ pub fn pack_err_structural(input: TokenStream) -> TokenStream { match parsed { PackErrInput::Simple { type_name } => { let name_str = type_name.to_string(); - let snake_name = to_snake_case(&name_str); + let snake_name = snake_case!(&name_str); let expanded = quote! { #[derive(::mingling::Groupped, ::serde::Serialize)] @@ -204,7 +176,7 @@ pub fn pack_err_structural(input: TokenStream) -> TokenStream { inner_type, } => { let name_str = type_name.to_string(); - let snake_name = to_snake_case(&name_str); + let snake_name = snake_case!(&name_str); let expanded = quote! { #[derive(::mingling::Groupped, ::serde::Serialize)] |
