use std::sync::Arc;
use std::vec::IntoIter;
use opendal_core::raw::*;
use opendal_core::*;
use super::core::DashmapCore;
pub struct DashmapLister {
root: String,
path: String,
iter: IntoIter<(String, Metadata)>,
}
impl DashmapLister {
pub fn new(core: Arc<DashmapCore>, root: String, path: String) -> Self {
let entries: Vec<_> = core
.cache
.iter()
.map(|item| (item.key().clone(), item.value().metadata.clone()))
.collect();
let path = build_abs_path(&root, &path);
Self {
root,
path,
iter: entries.into_iter(),
}
}
}
impl oio::List for DashmapLister {
async fn next(&mut self) -> Result<Option<oio::Entry>> {
for (key, metadata) in self.iter.by_ref() {
if key.starts_with(&self.path) {
let path = build_rel_path(&self.root, &key);
let entry = oio::Entry::new(&path, metadata);
return Ok(Some(entry));
}
}
Ok(None)
}
}