autapi-macros 0.0.1

Macros for autapi
Documentation
use convert_case::Casing;
use darling::FromMeta;
use proc_macro2::Span;
use syn::Lit;

#[derive(Debug, Copy, Clone)]
pub struct Case(Span, convert_case::Case<'static>);

impl Case {
    pub fn format(self, str: &str) -> String {
        str.to_case(self.1)
    }
    #[expect(unused)]
    pub fn span(&self) -> Span {
        self.0
    }
}

impl FromMeta for Case {
    fn from_value(value: &syn::Lit) -> darling::Result<Self> {
        match value {
            Lit::Str(str) => {
                let str = str.value();
                Ok(Self(
                    value.span(),
                    match str.as_str() {
                        "lowercase" => convert_case::Case::Lower,
                        "UPPERCASE" => convert_case::Case::Upper,
                        "PascalCase" => convert_case::Case::Pascal,
                        "camelCase" => convert_case::Case::Camel,
                        "snake_case" => convert_case::Case::Snake,
                        "SCREAMING_SNAKE_CASE" => convert_case::Case::UpperSnake,
                        "kebab-case" => convert_case::Case::Kebab,
                        "SCREAMING-KEBAB-CASE" => convert_case::Case::UpperKebab,
                        _ => return Err(darling::Error::unknown_value(&str)),
                    },
                ))
            }
            _ => Err(darling::Error::unexpected_lit_type(value)),
        }
    }
}