mirror of
https://github.com/sreedevk/deduplicator.git
synced 2026-10-23 03:34:54 +00:00
35 lines
732 B
Rust
35 lines
732 B
Rust
use super::file::FileMeta;
|
|
use dashmap::DashMap;
|
|
use std::sync::Arc;
|
|
|
|
#[allow(unused)]
|
|
#[derive(Debug, Hash, PartialEq, Eq)]
|
|
pub enum Index {
|
|
Size(u64),
|
|
Partial(Arc<[u8]>),
|
|
Full(Box<str>),
|
|
}
|
|
|
|
pub struct Store {
|
|
internal: Arc<DashMap<Index, Vec<Arc<FileMeta>>>>,
|
|
}
|
|
|
|
impl Store {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
internal: Arc::new(DashMap::new()),
|
|
}
|
|
}
|
|
|
|
pub fn entries(&self) -> Vec<Vec<Arc<FileMeta>>> {
|
|
self.internal.iter().map(|k| k.value().clone()).collect()
|
|
}
|
|
|
|
pub fn add(&self, index: Index, file: Arc<FileMeta>) {
|
|
self.internal
|
|
.entry(index)
|
|
.and_modify(|fg| fg.push(file.clone()))
|
|
.or_insert(vec![file]);
|
|
}
|
|
}
|