1use proc_macro::TokenStream;
2use syn::{parse_macro_input, LitStr};
3
4#[proc_macro]
5pub fn kebab2title(input: TokenStream) -> TokenStream {
6 let input_str = parse_macro_input!(input as LitStr).value();
7
8 let converted = kebab2title_impl(&input_str);
9 format!("\"{converted}\"").parse().unwrap()
10}
11
12fn kebab2title_impl(data: &str) -> String {
13 let mut result = String::with_capacity(data.len());
14 let mut capitalize_next = true;
15
16 for c in data.chars() {
17 if c == '-' {
18 result.push(' ');
19 capitalize_next = true;
20 } else if capitalize_next {
21 result.push(c.to_ascii_uppercase());
22 capitalize_next = false;
23 } else {
24 result.push(c);
25 }
26 }
27
28 result
29}