use heck::{ToLowerCamelCase, ToShoutySnakeCase, ToSnakeCase, ToUpperCamelCase};
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct Name {
pub parts: Vec<String>,
}
impl Name {
pub fn new(src: &str) -> Self {
let snake = src.to_snake_case();
let parts = snake.split("_").map(String::from).collect();
Self { parts }
}
pub fn camel_case(&self) -> String {
self.snake_case().to_lower_camel_case()
}
pub fn upper_camel_case(&self) -> String {
self.snake_case().to_upper_camel_case()
}
pub fn snake_case(&self) -> String {
self.parts.join("_")
}
pub fn upper_snake_case(&self) -> String {
self.snake_case().to_shouty_snake_case()
}
}
impl core::fmt::Display for Name {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.write_str(&self.upper_camel_case())
}
}