case_macro/
lib.rs

1mod convert;
2
3use proc_macro::TokenStream;
4use convert_case::Case;
5use quote::ToTokens;
6use crate::convert::Convertible;
7
8fn convert(input: proc_macro2::TokenStream, case: Case) -> syn::Result<proc_macro2::TokenStream> {
9    let input: Convertible = syn::parse2(input)?;
10    input.new_with_case(case).map(Convertible::into_token_stream)
11}
12
13fn convert_impl(input: TokenStream, case: Case) -> TokenStream {
14    let result = convert(input.into(), case).unwrap_or_else(|e| e.into_compile_error());
15    result.into()
16}
17
18#[proc_macro]
19pub fn uppercase(input: TokenStream) -> TokenStream {
20    convert_impl(input, Case::Upper)
21}
22#[proc_macro]
23pub fn lowercase(input: TokenStream) -> TokenStream {
24    convert_impl(input, Case::Lower)
25}
26#[proc_macro]
27pub fn title_case(input: TokenStream) -> TokenStream {
28    convert_impl(input, Case::Title)
29}
30#[proc_macro]
31pub fn camel_case(input: TokenStream) -> TokenStream {
32    convert_impl(input, Case::Camel)
33}
34#[proc_macro]
35pub fn pascal_case(input: TokenStream) -> TokenStream {
36    convert_impl(input, Case::Pascal)
37}
38#[proc_macro]
39pub fn snake_case(input: TokenStream) -> TokenStream {
40    convert_impl(input, Case::Snake)
41}
42#[proc_macro]
43pub fn upper_snake_case(input: TokenStream) -> TokenStream {
44    convert_impl(input, Case::UpperSnake)
45}
46#[proc_macro]
47pub fn kebab_case(input: TokenStream) -> TokenStream {
48    convert_impl(input, Case::Kebab)
49}
50#[proc_macro]
51pub fn cobol_case(input: TokenStream) -> TokenStream {
52    convert_impl(input, Case::Cobol)
53}
54#[proc_macro]
55pub fn train_case(input: TokenStream) -> TokenStream {
56    convert_impl(input, Case::Train)
57}
58#[proc_macro]
59pub fn flat_case(input: TokenStream) -> TokenStream {
60    convert_impl(input, Case::Flat)
61}
62#[proc_macro]
63pub fn upper_flat_case(input: TokenStream) -> TokenStream {
64    convert_impl(input, Case::UpperFlat)
65}