#![forbid(unsafe_code)]
fn main() -> Result<(), er7::Error> {
let text = "MSH|^~\\&|LAB|ACME|EHR|CLINIC|20260815081500||ORU^R01^ORU_R01|MSG00042|P|2.5\r\
PID|1||444333222^^^ACME^MR||EVERYWOMAN^EVE^E||19620320|F\r\
OBX|1|NM|2093-3^Cholesterol^LN||187|mg/dL|<200|N|||F";
let message = er7::parse(text)?;
assert_eq!(message.segments.len(), 3);
assert_eq!(message.header().unwrap().name, "MSH");
assert_eq!(message.segment("OBX").unwrap().name, "OBX");
println!("segments: {}", message.segments.len());
assert_eq!(message.separators, er7::Separators::default());
println!("delimiters: {}", message.separators);
assert_eq!(message.message_code().as_deref(), Some("ORU"));
assert_eq!(message.trigger_event().as_deref(), Some("R01"));
assert_eq!(message.message_structure().as_deref(), Some("ORU_R01"));
assert_eq!(message.control_id().as_deref(), Some("MSG00042"));
assert_eq!(message.version().as_deref(), Some("2.5"));
println!(
"message: {}^{} {} (HL7 {})",
message.message_code().unwrap_or_default(),
message.trigger_event().unwrap_or_default(),
message.control_id().unwrap_or_default(),
message.version().unwrap_or_default(),
);
let fragment = er7::parse_with("NTE|1||Fasting sample.", er7::Separators::default());
assert_eq!(fragment.query("NTE-3")?.as_deref(), Some("Fasting sample."));
println!("fragment note: {:?}", fragment.query("NTE-3")?.unwrap());
let odd = "MSH|^~\\&|LAB\rZPD|1|LOCAL^EXTENSION\rXYZ";
let odd = er7::parse(odd)?;
assert_eq!(odd.segments.len(), 3);
assert_eq!(odd.query("ZPD-2.2")?.as_deref(), Some("EXTENSION"));
println!("local segment: {:?}", odd.query("ZPD-2.2")?.unwrap());
println!("ok");
Ok(())
}