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}