use super::ICacheEntryValidity;
static NON_CACHEABLE_INSTANCE: NonCacheableCacheEntryValidity =
NonCacheableCacheEntryValidity { _identity: 0 };
pub struct NonCacheableCacheEntryValidity {
_identity: u8,
}
#[allow(clippy::new_without_default)]
impl NonCacheableCacheEntryValidity {
pub const INSTANCE: &'static Self = &NON_CACHEABLE_INSTANCE;
#[must_use]
pub const fn new() -> Self {
Self { _identity: 0 }
}
#[must_use]
pub const fn is_cacheable(&self) -> bool {
false
}
#[must_use]
pub const fn is_cache_still_valid(&self) -> bool {
false
}
}
impl ICacheEntryValidity for NonCacheableCacheEntryValidity {
fn is_cacheable(&self) -> bool {
Self::is_cacheable(self)
}
fn is_cache_still_valid(&self) -> bool {
Self::is_cache_still_valid(self)
}
}
#[cfg(test)]
mod tests {
use super::NonCacheableCacheEntryValidity;
use crate::cache::ICacheEntryValidity;
#[test]
fn singleton_and_public_constructor_have_java_behavior() {
let first = NonCacheableCacheEntryValidity::new();
let second = NonCacheableCacheEntryValidity::new();
assert!(!NonCacheableCacheEntryValidity::INSTANCE.is_cacheable());
assert!(!NonCacheableCacheEntryValidity::INSTANCE.is_cache_still_valid());
assert!(!std::ptr::eq(&first, &second));
assert!(!std::ptr::eq(
&first,
NonCacheableCacheEntryValidity::INSTANCE
));
assert!(std::ptr::eq(
NonCacheableCacheEntryValidity::INSTANCE,
NonCacheableCacheEntryValidity::INSTANCE
));
}
#[test]
fn dynamic_contract_also_returns_false() {
let validity: &dyn ICacheEntryValidity = NonCacheableCacheEntryValidity::INSTANCE;
assert!(!validity.is_cacheable());
assert!(!validity.is_cache_still_valid());
}
}