use proc_macro::TokenStream; use syn::{parse_macro_input, LitStr}; #[proc_macro] pub fn kebab2title(input: TokenStream) -> TokenStream { let input_str = parse_macro_input!(input as LitStr).value(); let converted = kebab2title_impl(&input_str); format!("\"{converted}\"").parse().unwrap() } fn kebab2title_impl(data: &str) -> String { let mut result = String::with_capacity(data.len()); let mut capitalize_next = true; for c in data.chars() { if c == '-' { result.push(' '); capitalize_next = true; } else if capitalize_next { result.push(c.to_ascii_uppercase()); capitalize_next = false; } else { result.push(c); } } result }