Skip to main content

eth_id/privacy/
mod.rs

1mod filter;
2mod minimizer;
3mod virtualizer;
4
5pub use filter::{PrivacyFilter, FilteredData, FilterMode};
6pub use minimizer::DataMinimizer;
7pub use virtualizer::DataVirtualizer;
8
9use serde::{Deserialize, Serialize};
10use sha2::{Sha256, Digest};
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct PrivacyMetadata {
14    pub original_hash: String,
15    pub filtered_hash: String,
16    pub mode: FilterMode,
17    pub fields_included: Vec<String>,
18    pub fields_masked: Vec<String>,
19    pub timestamp: chrono::DateTime<chrono::Utc>,
20}
21
22impl PrivacyMetadata {
23    pub fn new(mode: FilterMode) -> Self {
24        Self {
25            original_hash: String::new(),
26            filtered_hash: String::new(),
27            mode,
28            fields_included: Vec::new(),
29            fields_masked: Vec::new(),
30            timestamp: chrono::Utc::now(),
31        }
32    }
33    
34    pub fn set_original_hash(&mut self, data: &str) {
35        let mut hasher = Sha256::new();
36        hasher.update(data.as_bytes());
37        self.original_hash = format!("{:x}", hasher.finalize());
38    }
39    
40    pub fn set_filtered_hash(&mut self, data: &str) {
41        let mut hasher = Sha256::new();
42        hasher.update(data.as_bytes());
43        self.filtered_hash = format!("{:x}", hasher.finalize());
44    }
45}