use super::NodePath;
use zarrs_storage::StoreKey;
#[must_use]
fn meta_key_any(path: &NodePath, metadata_file_name: &str) -> StoreKey {
let path = path.as_str();
if path.eq("/") {
unsafe { StoreKey::new_unchecked(metadata_file_name.to_string()) }
} else {
let path = path.strip_prefix('/').unwrap_or(path);
unsafe { StoreKey::new_unchecked(format!("{path}/{metadata_file_name}")) }
}
}
#[must_use]
pub fn meta_key(path: &NodePath) -> StoreKey {
meta_key_v3(path)
}
#[must_use]
pub fn meta_key_v3(path: &NodePath) -> StoreKey {
meta_key_any(path, "zarr.json")
}
#[must_use]
pub fn meta_key_v2_array(path: &NodePath) -> StoreKey {
meta_key_any(path, ".zarray")
}
#[must_use]
pub fn meta_key_v2_group(path: &NodePath) -> StoreKey {
meta_key_any(path, ".zgroup")
}
#[must_use]
pub fn meta_key_v2_attributes(path: &NodePath) -> StoreKey {
meta_key_any(path, ".zattrs")
}
#[must_use]
pub fn data_key(path: &NodePath, chunk_key: &StoreKey) -> StoreKey {
let path = path.as_str();
let path = path.strip_prefix('/').unwrap_or(path);
let key_path = if path.is_empty() {
chunk_key.as_str().to_string()
} else {
format!("{}/{}", path, chunk_key.as_str())
};
unsafe { StoreKey::new_unchecked(key_path) }
}