use crate::errors::*;
use crate::lru_disk_cache::LruDiskCache;
use std::ffi::OsString;
use std::path::Path;
pub enum LazyDiskCache {
Uninit { root: OsString, max_size: u64 },
Init(LruDiskCache),
}
impl LazyDiskCache {
pub fn get_or_init(&mut self) -> Result<&mut LruDiskCache> {
match self {
LazyDiskCache::Uninit { root, max_size } => {
*self = LazyDiskCache::Init(LruDiskCache::new(&root, *max_size)?);
self.get_or_init()
}
LazyDiskCache::Init(d) => Ok(d),
}
}
pub fn get(&mut self) -> Option<&mut LruDiskCache> {
match self {
LazyDiskCache::Uninit { .. } => None,
LazyDiskCache::Init(d) => Some(d),
}
}
pub fn capacity(&self) -> u64 {
match self {
LazyDiskCache::Uninit { max_size, .. } => *max_size,
LazyDiskCache::Init(d) => d.capacity(),
}
}
pub fn path(&self) -> &Path {
match self {
LazyDiskCache::Uninit { root, .. } => root.as_ref(),
LazyDiskCache::Init(d) => d.path(),
}
}
}