pub mod dashmap_cache;
#[cfg(feature = "moka")]
#[cfg_attr(docsrs, doc(cfg(feature = "moka")))]
pub mod moka_cache;
#[cfg(feature = "redis")]
#[cfg_attr(docsrs, doc(cfg(feature = "redis")))]
pub mod redis_cache;
#[cfg(feature = "memcached")]
#[cfg_attr(docsrs, doc(cfg(feature = "memcached")))]
pub mod memcached_cache;
#[cfg(feature = "quick_cache")]
#[cfg_attr(docsrs, doc(cfg(feature = "quick_cache")))]
pub mod quickcache_cache;
pub use dashmap_cache::DashMapCache;
#[cfg(feature = "moka")]
#[cfg_attr(docsrs, doc(cfg(feature = "moka")))]
pub use moka_cache::{MokaCache, MokaCacheConfig};
#[cfg(feature = "redis")]
#[cfg_attr(docsrs, doc(cfg(feature = "redis")))]
pub use redis_cache::RedisCache;
#[cfg(feature = "memcached")]
#[cfg_attr(docsrs, doc(cfg(feature = "memcached")))]
pub use memcached_cache::MemcachedCache;
#[cfg(feature = "quick_cache")]
#[cfg_attr(docsrs, doc(cfg(feature = "quick_cache")))]
pub use quickcache_cache::QuickCacheBackend;
#[cfg(feature = "moka")]
#[cfg_attr(docsrs, doc(cfg(feature = "moka")))]
pub type L1Cache = MokaCache;
#[cfg(feature = "redis")]
#[cfg_attr(docsrs, doc(cfg(feature = "redis")))]
pub type L2Cache = RedisCache;
#[must_use]
#[allow(clippy::indexing_slicing)]
pub fn matches_pattern(key: &str, pattern: &str) -> bool {
let parts: Vec<&str> = pattern.split('*').collect();
if parts.len() == 1 {
return key == pattern;
}
if !key.starts_with(parts[0]) {
return false;
}
let mut key_rem = &key[parts[0].len()..];
for &part in &parts[1..parts.len() - 1] {
if let Some(idx) = key_rem.find(part) {
key_rem = &key_rem[idx + part.len()..];
} else {
return false;
}
}
key_rem.ends_with(parts[parts.len() - 1])
}
#[cfg(test)]
mod tests {
use super::matches_pattern;
#[test]
fn test_matches_pattern() {
assert!(matches_pattern("user:123", "user:123"));
assert!(matches_pattern("user:123", "user:*"));
assert!(matches_pattern("user:123:profile", "user:*:profile"));
assert!(matches_pattern(
"user:123:profile:details",
"user:*:details"
));
assert!(!matches_pattern("product:123", "user:*"));
assert!(matches_pattern("user:123", "*"));
assert!(matches_pattern("user:123", "user:123*"));
assert!(matches_pattern("user:123", "*123"));
assert!(!matches_pattern("user:123", "user:1234*"));
}
}