From faae53e760743971c43800f6e6bc2fcbaec582b7 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 29 Jun 2026 13:53:54 +0800 Subject: refactor(pack_err): replace inline to_snake_case with just_fmt --- mingling_macros/src/pack_err.rs | 38 +++++--------------------------------- 1 file 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)] -- cgit