use serde::{Deserialize, Serialize};
use super::{
AnomalyFingerprint, BankingFingerprint, CorrelationFingerprint, IntegrityFingerprint, Manifest,
PrivacyAudit, RulesFingerprint, SchemaFingerprint, StatisticsFingerprint,
};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Fingerprint {
pub manifest: Manifest,
pub schema: SchemaFingerprint,
pub statistics: StatisticsFingerprint,
#[serde(skip_serializing_if = "Option::is_none")]
pub correlations: Option<CorrelationFingerprint>,
#[serde(skip_serializing_if = "Option::is_none")]
pub integrity: Option<IntegrityFingerprint>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rules: Option<RulesFingerprint>,
#[serde(skip_serializing_if = "Option::is_none")]
pub anomalies: Option<AnomalyFingerprint>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub banking: Option<BankingFingerprint>,
pub privacy_audit: PrivacyAudit,
}
impl Fingerprint {
pub fn new(
manifest: Manifest,
schema: SchemaFingerprint,
statistics: StatisticsFingerprint,
privacy_audit: PrivacyAudit,
) -> Self {
Self {
manifest,
schema,
statistics,
correlations: None,
integrity: None,
rules: None,
anomalies: None,
banking: None,
privacy_audit,
}
}
pub fn with_banking(mut self, banking: BankingFingerprint) -> Self {
self.banking = Some(banking);
self
}
pub fn has_banking(&self) -> bool {
self.banking.is_some()
}
pub fn with_correlations(mut self, correlations: CorrelationFingerprint) -> Self {
self.correlations = Some(correlations);
self
}
pub fn with_integrity(mut self, integrity: IntegrityFingerprint) -> Self {
self.integrity = Some(integrity);
self
}
pub fn with_rules(mut self, rules: RulesFingerprint) -> Self {
self.rules = Some(rules);
self
}
pub fn with_anomalies(mut self, anomalies: AnomalyFingerprint) -> Self {
self.anomalies = Some(anomalies);
self
}
pub fn version(&self) -> &str {
&self.manifest.version
}
pub fn has_correlations(&self) -> bool {
self.correlations.is_some()
}
pub fn has_integrity(&self) -> bool {
self.integrity.is_some()
}
pub fn has_rules(&self) -> bool {
self.rules.is_some()
}
pub fn has_anomalies(&self) -> bool {
self.anomalies.is_some()
}
pub fn epsilon_spent(&self) -> f64 {
self.privacy_audit.total_epsilon_spent
}
}