mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'strconv/src/lib.rs')
| -rw-r--r-- | strconv/src/lib.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/strconv/src/lib.rs b/strconv/src/lib.rs new file mode 100644 index 0000000..4b9d626 --- /dev/null +++ b/strconv/src/lib.rs @@ -0,0 +1,29 @@ +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 +} |