use convert_case::{Case, Casing};
use darling::FromMeta;
#[derive(Debug, FromMeta, Clone, Copy)]
pub(crate) enum RenameCasing {
#[darling(rename = "lowercase")]
Lowercase,
#[darling(rename = "UPPERCASE")]
UpperCase,
#[darling(rename = "PascalCase")]
PascalCase,
#[darling(rename = "camelCase")]
CamelCase,
#[darling(rename = "snake_case")]
SnakeCase,
#[darling(rename = "SCREAMING_SNAKE_CASE")]
ScreamingSnakeCase,
#[darling(rename = "kebab-case")]
KebabCase,
#[darling(rename = "SCREAMING-KEBAB-CASE")]
ScreamingKebabCase,
}
impl From<RenameCasing> for Case<'_> {
fn from(value: RenameCasing) -> Self {
match value {
RenameCasing::Lowercase => Case::Lower,
RenameCasing::UpperCase => Case::Upper,
RenameCasing::PascalCase => Case::Pascal,
RenameCasing::CamelCase => Case::Camel,
RenameCasing::SnakeCase => Case::Snake,
RenameCasing::ScreamingSnakeCase => Case::UpperSnake,
RenameCasing::KebabCase => Case::Kebab,
RenameCasing::ScreamingKebabCase => Case::UpperKebab,
}
}
}
pub(crate) fn apply_rename_casing(s: &str, casing: Option<RenameCasing>) -> String {
casing
.map(|case| s.to_case(case.into()))
.unwrap_or_else(|| s.to_string())
}