use zarrs::{
node::{Node, NodePath, meta_key_v3},
storage::{
Bytes, ReadableStorageTraits, ReadableWritableListableStorage, ReadableWritableStorage,
StorageError,
},
};
use crate::N5Store;
pub fn convert_n5_node(
inner_store: ReadableWritableStorage,
path: &NodePath,
infer_missing_metadata: bool,
) -> Result<(), StorageError> {
let mut n5_store = N5Store::new(inner_store.clone());
n5_store.set_infer_missing_metadata(infer_missing_metadata);
let k = meta_key_v3(path);
let Some(b) = n5_store.get(&k)? else {
return Err(StorageError::MissingMetadata(k.to_prefix()));
};
inner_store.set(&k, b)
}
pub fn convert_n5_hierarchy(
inner_store: ReadableWritableListableStorage,
path: &NodePath,
infer_missing_metadata: bool,
) -> Result<(), StorageError> {
let mut n5_store = N5Store::new(inner_store.clone());
n5_store.set_infer_missing_metadata(infer_missing_metadata);
let arc_n5_store = std::sync::Arc::new(n5_store);
let root = Node::open(&arc_n5_store, path.as_str()).expect("node open");
for node in std::iter::once(&root).chain(root.children().iter()) {
let key = meta_key_v3(node.path());
let val =
Bytes::from(serde_json::to_vec(node.metadata()).expect("metadata should serialize"));
inner_store.set(&key, val)?;
}
Ok(())
}