diff_priv/test/
csv_exporter.rs1use crate::test::environment::Datasets;
2use csv::Writer;
3
4const MUELLER_HEADERS: [&str; 16] = [
5 "uuid",
6 "disclosure_risk",
7 "id",
8 "gender",
9 "age",
10 "run_id",
11 "running",
12 "speed",
13 "duration",
14 "distance",
15 "side",
16 "bout",
17 "freq",
18 "walk_ratio",
19 "start",
20 "end",
21];
22
23const ADULT_LARGE_HEADERS: [&str; 15] = [
24 "uuid",
25 "disclosure_risk",
26 "timestamp",
27 "age",
28 "fnlwgt",
29 "education_num",
30 "capital_gain",
31 "capital_loss",
32 "hours_per_week",
33 "education",
34 "marital_status",
35 "workclass",
36 "native_country",
37 "occupation",
38 "class",
39];
40
41const ADULT_HEADERS: [&str; 10] = [
42 "uuid",
43 "disclosure_risk",
44 "timestamp",
45 "age",
46 "fnlwgt",
47 "education_num",
48 "capital_gain",
49 "capital_loss",
50 "hours_per_week",
51 "class",
52];
53
54pub struct CsvExporter {
55 data: Vec<Vec<String>>,
56 pub path: String,
57 dataset: Datasets,
58}
59
60impl CsvExporter {
61 pub fn new(path: String, dataset: Datasets) -> Self {
62 Self {
63 path,
64 data: vec![],
65 dataset,
66 }
67 }
68
69 pub fn export(&self) -> Result<(), Box<dyn std::error::Error>> {
70 println!("Exporting to {}", self.path);
71 let mut writer = Writer::from_path(&self.path)?;
72 match self.dataset {
74 Datasets::Adult(_) => writer.write_record(&ADULT_HEADERS)?,
75 Datasets::AdultLarge(_) => writer.write_record(&ADULT_LARGE_HEADERS)?,
76 Datasets::Mueller(_) => writer.write_record(&MUELLER_HEADERS)?,
77 }
78
79 for record in &self.data {
80 writer.write_record(record)?
81 }
82
83 writer.flush()?;
84 Ok(())
85 }
86
87 pub fn add(&mut self, value: Vec<String>) {
88 self.data.push(value)
89 }
90}