use std::fmt::Debug;
use std::marker::PhantomData;
use crate::{CacheableModels, DefaultCacheModels};
use super::{
InMemoryCache,
config::{Config, ResourceType},
};
#[allow(clippy::type_complexity)]
#[must_use = "has no effect if not built"]
#[derive(Debug)]
pub struct InMemoryCacheBuilder<CacheModels: CacheableModels = DefaultCacheModels>(
Config,
PhantomData<CacheModels>,
);
impl<CacheModels: CacheableModels> InMemoryCacheBuilder<CacheModels> {
pub const fn new() -> Self {
Self(Config::new(), PhantomData)
}
#[allow(clippy::type_complexity)]
pub fn build(self) -> InMemoryCache<CacheModels> {
InMemoryCache::new_with_config(self.0)
}
pub const fn resource_types(mut self, resource_types: ResourceType) -> Self {
self.0.resource_types = resource_types;
self
}
pub const fn message_cache_size(mut self, message_cache_size: usize) -> Self {
self.0.message_cache_size = message_cache_size;
self
}
}
impl<CacheModels: CacheableModels> Default for InMemoryCacheBuilder<CacheModels> {
fn default() -> Self {
Self(Config::default(), PhantomData)
}
}
#[cfg(test)]
mod tests {
use super::InMemoryCacheBuilder;
use static_assertions::assert_impl_all;
use std::fmt::Debug;
assert_impl_all!(InMemoryCacheBuilder: Debug, Default, Send, Sync);
}