use yog_ids::pack::{ANY_LOADER, DATA, OVERLAYS, TAGS};
pub fn overlay(when: &str, file: &str) -> String {
if when.is_empty() {
file.to_string()
} else {
format!("{OVERLAYS}/{when}/{file}")
}
}
pub fn for_version(version: &str, file: &str) -> String {
overlay(&format!("{ANY_LOADER}/{version}"), file)
}
pub fn tag_file(kind: &str, tag: &str) -> String {
data_in(
&[TAGS, yog_ids::registry_of(kind)].join(yog_ids::sep::PATH),
tag,
)
}
pub fn data_in(dir: &str, id: &str) -> String {
let (ns, path) = yog_ids::split(id);
format!("{DATA}/{ns}/{dir}/{path}{}", yog_ids::res::JSON)
}
pub fn data_file(kind: &str, id: &str) -> String {
data_in(yog_ids::registry_of(kind), id)
}
pub fn data_files(kind: &str, id: &str) -> Vec<String> {
yog_ids::registry_dirs(kind)
.iter()
.map(|dir| data_in(dir, id))
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn files_are_where_the_hosts_look() {
assert_eq!(
tag_file("block", "needs_iron_tool"),
"data/minecraft/tags/block/needs_iron_tool.json"
);
assert_eq!(
overlay("fabric/1.20", "data/x.json"),
"when/fabric/1.20/data/x.json"
);
assert_eq!(
for_version("1.21", "data/x.json"),
"when/any/1.21/data/x.json"
);
assert_eq!(overlay("", "data/x.json"), "data/x.json");
}
}