use std::borrow::Cow;
#[must_use]
pub fn normalize_package_separator(module_name: &str) -> Cow<'_, str> {
if module_name.contains('\'') {
Cow::Owned(module_name.replace('\'', "::"))
} else {
Cow::Borrowed(module_name)
}
}
#[must_use]
pub fn legacy_package_separator(module_name: &str) -> Cow<'_, str> {
if module_name.contains("::") {
Cow::Owned(module_name.replace("::", "'"))
} else {
Cow::Borrowed(module_name)
}
}
#[must_use]
pub fn module_variant_pairs(old_module: &str, new_module: &str) -> Vec<(String, String)> {
let canonical_old = normalize_package_separator(old_module).into_owned();
let canonical_new = normalize_package_separator(new_module).into_owned();
let canonical = (canonical_old.clone(), canonical_new.clone());
let legacy = (
legacy_package_separator(&canonical_old).into_owned(),
legacy_package_separator(&canonical_new).into_owned(),
);
if legacy == canonical { vec![canonical] } else { vec![canonical, legacy] }
}