use super::NESTED;
pub const GAME_PACKAGES: [(&str, &str); 2] = [("net/minecraft/", ""), ("com/mojang/", "mojang/")];
const PACKAGE_SEP: char = '/';
const NAMESPACE_SEP: char = '.';
pub fn is_game_class(internal: &str) -> bool {
GAME_PACKAGES
.iter()
.any(|(root, _)| internal.starts_with(root))
}
pub fn of_class(internal: &str) -> Option<(Vec<String>, String)> {
let (root, under) = GAME_PACKAGES
.iter()
.find(|(root, _)| internal.starts_with(root))?;
let path = format!("{under}{}", &internal[root.len()..]);
let (package, name) = path.rsplit_once(PACKAGE_SEP).unwrap_or(("", &path));
let namespace = package
.split(PACKAGE_SEP)
.filter(|s| !s.is_empty())
.map(yog_codegen::pascal)
.collect();
Some((namespace, name.replace(NESTED, &NAMESPACE_SEP.to_string())))
}
pub fn class_of(namespace: &[String], name: &str) -> String {
let package: String = namespace
.iter()
.map(|s| format!("{}{PACKAGE_SEP}", s.to_lowercase()))
.collect();
let name = name.replace(NAMESPACE_SEP, &NESTED.to_string());
let (root, rest) = GAME_PACKAGES
.iter()
.find(|(_, under)| !under.is_empty() && package.starts_with(under))
.map_or((GAME_PACKAGES[0].0, package.as_str()), |(root, under)| {
(*root, &package[under.len()..])
});
format!("{root}{rest}{name}")
}
#[cfg(test)]
mod tests;