use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum CachePolicy {
#[default]
Auto,
None,
Custom {
tools: bool,
system: bool,
messages: bool,
},
}
impl CachePolicy {
pub fn is_enabled(&self) -> bool {
!matches!(self, Self::None)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_is_auto() {
assert_eq!(CachePolicy::default(), CachePolicy::Auto);
}
#[test]
fn test_is_enabled() {
assert!(CachePolicy::Auto.is_enabled());
assert!(!CachePolicy::None.is_enabled());
assert!(CachePolicy::Custom {
tools: false,
system: false,
messages: false,
}
.is_enabled());
}
#[test]
fn test_serde_roundtrip_auto() {
let policy = CachePolicy::Auto;
let json = serde_json::to_string(&policy).unwrap();
let restored: CachePolicy = serde_json::from_str(&json).unwrap();
assert_eq!(policy, restored);
}
#[test]
fn test_serde_roundtrip_custom() {
let policy = CachePolicy::Custom {
tools: true,
system: true,
messages: false,
};
let json = serde_json::to_string(&policy).unwrap();
let restored: CachePolicy = serde_json::from_str(&json).unwrap();
assert_eq!(policy, restored);
}
}