use super::partition::SubscriptionPartition;
#[derive(Debug, Clone)]
pub struct RetentionPolicy {
pub max_age_secs: Option<u64>,
pub pin_dlq: bool,
pub sweep_interval_ms: u64,
pub extra_subscriptions: Vec<SubscriptionPartition>,
}
impl Default for RetentionPolicy {
fn default() -> Self {
Self {
max_age_secs: retention_max_age_secs(),
pin_dlq: retention_pin_dlq(),
sweep_interval_ms: retention_sweep_ms(),
extra_subscriptions: Vec::new(),
}
}
}
#[must_use]
pub fn retention_max_age_secs() -> Option<u64> {
std::env::var("PHOTON_TRANSPORT_MAX_AGE_SECS")
.ok()
.and_then(|s| s.parse().ok())
.filter(|&v| v > 0)
}
#[must_use]
pub fn retention_pin_dlq() -> bool {
std::env::var("PHOTON_RETENTION_PIN_DLQ")
.ok()
.is_none_or(|s| !matches!(s.as_str(), "0" | "false" | "off"))
}
#[must_use]
pub fn retain_seq_margin() -> i64 {
std::env::var("PHOTON_TRANSPORT_RETAIN_SEQ")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(5)
.max(0)
}
#[must_use]
pub fn retention_sweep_ms() -> u64 {
std::env::var("PHOTON_RETENTION_SWEEP_MS")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(30_000)
}