read_the_report/
read_the_report.rs1use er7_redact::{Policy, Redactor};
7
8fn main() -> Result<(), er7_redact::Error> {
9 let text = "MSH|^~\\&|ADT1|MCM||||||ADT^A08|MSG1|P|2.5\r\
10 PID|1||PATID1234^^^ADT1^MR||EVERYWOMAN^EVE^E||19610615|F|||\
11 12 ELM ST^^BOSTON^MA^02101||555-555-1111~555-555-2222\r\
12 NK1|1|EVERYMAN^ADAM|SPO";
13
14 let mut message = er7::parse(text)?;
15 let report = Redactor::new(Policy::patient_identifiers()).redact(&mut message);
16
17 for change in &report.changes {
18 println!("{:<18} {}", change.path.to_string(), change.action);
19 }
20
21 let paths: Vec<String> = report.changes.iter().map(|c| c.path.to_string()).collect();
25 assert!(paths.contains(&"PID[1]-5[1].1.1".to_string()));
26 assert!(paths.contains(&"PID[1]-5[1].3.1".to_string()));
27 assert!(paths.contains(&"PID[1]-13[2].1.1".to_string()));
28
29 for change in &report.changes {
32 assert!(message.query(&change.path.to_string()).is_ok());
33 }
34
35 let printed = report.to_string();
38 for value in ["EVERYWOMAN", "PATID1234", "19610615", "BOSTON"] {
39 assert!(!printed.contains(value));
40 }
41
42 assert!(!paths.iter().any(|p| p.starts_with("GT1")));
46
47 println!("\n{} positions changed", report.len());
48 Ok(())
49}