use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
pub struct PrivacyBudget {
pub epsilon: f64,
pub delta: f64,
}
impl PrivacyBudget {
pub fn new(epsilon: f64, delta: f64) -> Self {
Self { epsilon, delta }
}
pub fn allows(&self, spent: f64) -> bool {
spent <= self.epsilon
}
pub fn remaining(&self, spent: f64) -> f64 {
(self.epsilon - spent).max(0.0)
}
}
impl Default for PrivacyBudget {
fn default() -> Self {
Self { epsilon: 8.0, delta: 1e-5 }
}
}