pub mod config;
pub mod gc;
pub mod push;
pub mod server;
pub mod signing;
pub mod storage;
pub use config::{BackendConfig, CacheConfig};
pub use gc::GcResult;
pub use push::PushResult;
pub use server::{build_router, serve, AppState};
pub use signing::{verify_narinfo_signature, CacheSigner};
pub use storage::{LocalStorage, S3Storage, StorageBackend, StorageIndex};
#[derive(Debug, thiserror::Error)]
pub enum CacheError {
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("path not found: {0}")]
PathNotFound(String),
#[error("signing error: {0}")]
Signing(String),
#[error("not implemented: {0}")]
NotImplemented(&'static str),
#[error("narinfo error: {0}")]
NarInfo(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn cache_error_display() {
let e = CacheError::PathNotFound("/nix/store/abc".to_string());
assert!(format!("{e}").contains("/nix/store/abc"));
}
#[test]
fn cache_error_io_display() {
let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "missing");
let e = CacheError::Io(io_err);
assert!(format!("{e}").contains("missing"));
}
#[test]
fn cache_error_signing_display() {
let e = CacheError::Signing("bad key".to_string());
assert!(format!("{e}").contains("bad key"));
}
#[test]
fn cache_error_not_implemented_display() {
let e = CacheError::NotImplemented("S3");
assert!(format!("{e}").contains("S3"));
}
#[test]
fn cache_error_narinfo_display() {
let e = CacheError::NarInfo("parse failed".to_string());
assert!(format!("{e}").contains("parse failed"));
}
}