use std::path::{Path, PathBuf};
pub(crate) trait Cache {
fn new(path: PathBuf) -> Self;
fn path(&self) -> &PathBuf;
fn path_exists(&self) -> bool {
self.path().exists()
}
fn invalidate(&mut self);
fn total_size(&mut self) -> u64;
fn files(&mut self) -> &[PathBuf];
fn files_sorted(&mut self) -> &[PathBuf];
fn known_to_be_empty(&mut self);
fn items(&mut self) -> &[PathBuf];
fn number_of_items(&mut self) -> usize;
}
pub(crate) trait RegistrySuperCache {
type SubCache;
fn new(path: PathBuf) -> Self;
fn invalidate(&mut self);
fn caches(&mut self) -> &mut Vec<Self::SubCache>;
fn files(&mut self) -> Vec<PathBuf>;
fn files_sorted(&mut self) -> Vec<PathBuf>;
fn total_size(&mut self) -> u64;
fn number_of_subcaches(&mut self) -> usize;
fn total_number_of_files(&mut self) -> usize;
fn items(&mut self) -> &[PathBuf];
fn number_of_items(&mut self) -> usize;
}
pub(crate) trait RegistrySubCache {
fn new(path: PathBuf) -> Self;
fn name(&self) -> &str;
fn path_exists(&self) -> bool {
self.path().exists()
}
fn invalidate(&mut self);
fn total_size(&mut self) -> u64;
fn files(&mut self) -> &[PathBuf];
fn number_of_files(&mut self) -> usize;
fn files_sorted(&mut self) -> &[PathBuf];
fn path(&self) -> &PathBuf;
fn known_to_be_empty(&mut self);
fn items(&mut self) -> &[PathBuf];
fn number_of_items(&mut self) -> usize;
}
pub(crate) fn get_cache_name(path: &Path) -> String {
let file_name = path.file_name();
let last = file_name.unwrap().to_str().unwrap().to_string();
let mut v = last.split('-').collect::<Vec<_>>();
let _ = v.pop();
v.join("-")
}