use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum CacheRetention {
Short,
Long,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub struct CacheBreakpoint {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retention: Option<CacheRetention>,
}
impl CacheBreakpoint {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn with_retention(retention: CacheRetention) -> Self {
Self {
retention: Some(retention),
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub struct PromptCache {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retention: Option<CacheRetention>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub automatic: bool,
}
impl PromptCache {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn automatic() -> Self {
Self {
automatic: true,
..Self::default()
}
}
#[must_use]
pub fn key(mut self, key: impl Into<String>) -> Self {
self.key = Some(key.into());
self
}
#[must_use]
pub fn retention(mut self, retention: CacheRetention) -> Self {
self.retention = Some(retention);
self
}
}