thesix 0.2.3

Policy-driven six-tier cache orchestration for Rust
Documentation
use std::sync::Mutex;

use crate::tier::TierId;
use crate::tier::fixed_tier_stub::FixedTierStub;
use crate::tier::tier_trait::{CacheTier, TierHealth};

#[derive(Debug)]
pub struct L0Stub<V> {
    inner: Mutex<FixedTierStub<V>>,
}

impl<V> L0Stub<V> {
    pub fn new() -> Self {
        L0Stub {
            inner: Mutex::new(FixedTierStub::new()),
        }
    }
}

impl<V: Clone + Send + Sync + 'static> CacheTier<V> for L0Stub<V> {
    fn name(&self) -> String {
        "L0-request-local".into()
    }

    fn get(&self, key: &crate::key::KeyRef<'_>) -> Result<Option<V>, crate::error::CacheError> {
        self.inner
            .lock()
            .map_err(|_| crate::error::CacheError::ConfigurationError)?
            .get(key)
    }

    fn set(
        &self,
        key: &crate::key::KeyRef<'_>,
        value: V,
        ttl: Option<std::time::Duration>,
    ) -> Result<(), crate::error::CacheError> {
        self.inner
            .lock()
            .map_err(|_| crate::error::CacheError::ConfigurationError)?
            .set(key, value, ttl)
    }

    fn remove(&self, key: &crate::key::KeyRef<'_>) -> Result<(), crate::error::CacheError> {
        self.inner
            .lock()
            .map_err(|_| crate::error::CacheError::ConfigurationError)?
            .remove(key)
    }

    fn contains(&self, key: &crate::key::KeyRef<'_>) -> Result<bool, crate::error::CacheError> {
        self.inner
            .lock()
            .map_err(|_| crate::error::CacheError::ConfigurationError)?
            .contains(key)
    }

    fn health(&self) -> TierHealth {
        TierHealth::default()
    }

    fn tier_id(&self) -> TierId {
        TierId::L0
    }
}