use super::v1;
use crate::name::{camel_case, pascal_case, snake_case};
pub(crate) fn spellings(declared: &str) -> v1::Spellings {
let snake = snake_case(declared);
v1::Spellings {
declared: declared.to_string(),
camel: camel_case(declared),
pascal: pascal_case(declared),
screaming: snake.to_uppercase(),
snake,
}
}
pub(crate) fn dotted_name(dotted: &str) -> v1::DottedName {
let segments: Vec<String> = dotted
.split('.')
.filter(|segment| !segment.is_empty())
.map(str::to_string)
.collect();
v1::DottedName {
dotted: dotted.to_string(),
joined_camel: joined_camel(dotted),
underscored: segments.join("_"),
segments,
}
}
pub(crate) fn joined_camel(dotted: &str) -> String {
dotted
.split('.')
.filter(|segment| !segment.is_empty())
.map(|segment| {
let mut chars = segment.chars();
match chars.next() {
Some(first) => first.to_uppercase().collect::<String>() + chars.as_str(),
None => String::new(),
}
})
.collect()
}