use std::path::Path;
use crate::utils::error::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum StorageTier {
InMemory,
OnDisk,
Uninitialized,
}
impl StorageTier {
#[must_use]
pub fn is_in_memory(self) -> bool {
self == Self::InMemory
}
#[must_use]
pub fn is_on_disk(self) -> bool {
self == Self::OnDisk
}
}
pub trait TieredStore: Send + Sync {
fn estimated_ram_bytes(&self) -> usize;
fn tier(&self) -> StorageTier;
fn persist(&self, path: &Path) -> Result<()>;
fn open_mmap(&self, path: &Path) -> Result<()>;
fn reload_to_ram(&self) -> Result<()>;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_storage_tier_predicates() {
assert!(StorageTier::InMemory.is_in_memory());
assert!(!StorageTier::InMemory.is_on_disk());
assert!(StorageTier::OnDisk.is_on_disk());
assert!(!StorageTier::OnDisk.is_in_memory());
assert!(!StorageTier::Uninitialized.is_in_memory());
assert!(!StorageTier::Uninitialized.is_on_disk());
}
#[test]
fn test_storage_tier_equality() {
assert_eq!(StorageTier::InMemory, StorageTier::InMemory);
assert_ne!(StorageTier::InMemory, StorageTier::OnDisk);
assert_ne!(StorageTier::OnDisk, StorageTier::Uninitialized);
}
}