use std::time::Duration;
#[derive(Debug, Clone)]
#[allow(clippy::struct_excessive_bools)] pub struct CacheConfig {
pub enable_search: bool,
pub search_ttl: Duration,
pub enable_info: bool,
pub info_ttl: Duration,
pub enable_comments: bool,
pub comments_ttl: Duration,
pub enable_pkgbuild: bool,
pub pkgbuild_ttl: Duration,
pub memory_cache_size: usize,
pub enable_disk_cache: bool,
}
impl Default for CacheConfig {
fn default() -> Self {
Self {
enable_search: false,
search_ttl: Duration::from_secs(300), enable_info: false,
info_ttl: Duration::from_secs(900), enable_comments: false,
comments_ttl: Duration::from_secs(600), enable_pkgbuild: false,
pkgbuild_ttl: Duration::from_secs(3600), memory_cache_size: 100,
enable_disk_cache: false,
}
}
}
#[derive(Debug, Clone)]
pub struct CacheConfigBuilder {
config: CacheConfig,
}
impl CacheConfigBuilder {
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn new() -> Self {
Self {
config: CacheConfig::default(),
}
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn enable_search(mut self, enable: bool) -> Self {
self.config.enable_search = enable;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn search_ttl(mut self, ttl: Duration) -> Self {
self.config.search_ttl = ttl;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn enable_info(mut self, enable: bool) -> Self {
self.config.enable_info = enable;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn info_ttl(mut self, ttl: Duration) -> Self {
self.config.info_ttl = ttl;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn enable_comments(mut self, enable: bool) -> Self {
self.config.enable_comments = enable;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn comments_ttl(mut self, ttl: Duration) -> Self {
self.config.comments_ttl = ttl;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn enable_pkgbuild(mut self, enable: bool) -> Self {
self.config.enable_pkgbuild = enable;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn pkgbuild_ttl(mut self, ttl: Duration) -> Self {
self.config.pkgbuild_ttl = ttl;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn memory_cache_size(mut self, size: usize) -> Self {
self.config.memory_cache_size = size;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn enable_disk_cache(mut self, enable: bool) -> Self {
self.config.enable_disk_cache = enable;
self
}
#[must_use]
#[allow(clippy::missing_const_for_fn)] pub fn build(self) -> CacheConfig {
self.config
}
}
impl Default for CacheConfigBuilder {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_cache_config_default() {
let config = CacheConfig::default();
assert!(!config.enable_search);
assert!(!config.enable_info);
assert!(!config.enable_comments);
assert!(!config.enable_pkgbuild);
assert!(!config.enable_disk_cache);
assert_eq!(config.memory_cache_size, 100);
assert_eq!(config.search_ttl, Duration::from_secs(300));
assert_eq!(config.info_ttl, Duration::from_secs(900));
assert_eq!(config.comments_ttl, Duration::from_secs(600));
assert_eq!(config.pkgbuild_ttl, Duration::from_secs(3600));
}
#[test]
fn test_cache_config_builder() {
let config = CacheConfigBuilder::new()
.enable_search(true)
.search_ttl(Duration::from_secs(600))
.enable_info(true)
.info_ttl(Duration::from_secs(1800))
.memory_cache_size(200)
.enable_disk_cache(true)
.build();
assert!(config.enable_search);
assert!(config.enable_info);
assert_eq!(config.search_ttl, Duration::from_secs(600));
assert_eq!(config.info_ttl, Duration::from_secs(1800));
assert_eq!(config.memory_cache_size, 200);
assert!(config.enable_disk_cache);
}
}