use std::sync::Arc;
use trait_kit::prelude::*;
use crate::backend::CacheBackend;
use crate::error::OxCacheError;
pub fn register_cache_shutdown(
coord: &AsyncShutdownCoordinator,
backend: Arc<dyn CacheBackend + Send + Sync>,
) -> Result<(), OxCacheError> {
coord
.register_hook(ShutdownPhase::StopRequests, || Box::pin(async {}))
.map_err(|e| OxCacheError::Internal(format!("shutdown register StopRequests: {e}")))?;
let drain_backend = Arc::clone(&backend);
coord
.register_hook(ShutdownPhase::DrainQueue, || {
Box::pin(async move {
let _ = drain_backend.health_check().await;
})
})
.map_err(|e| OxCacheError::Internal(format!("shutdown register DrainQueue: {e}")))?;
let close_backend = Arc::clone(&backend);
coord
.register_hook(ShutdownPhase::CloseConnections, || {
Box::pin(async move {
close_backend.shutdown().await;
})
})
.map_err(|e| OxCacheError::Internal(format!("shutdown register CloseConnections: {e}")))?;
Ok(())
}
#[cfg(test)]
mod tests;