rust-hl7 0.5.0

HL7 Parser and object builder? query'er? - experimental only at any rate
Documentation
/*!
 A short example demonstrating one way to use this library for HL7 processing.
*/

use rusthl7::{escape_sequence::EscapeSequence, message::Message};
use std::{convert::TryFrom, error::Error};

fn main() -> Result<(), Box<dyn Error>> {
    // Normally message would come over the wire from a remote service etc.
    // Consider using the hl7-mllp-codec crate or similar to make building those network services easier.
    let hl7_string = get_sample_message();

    // Parse the string into a structured entity
    let message = Message::try_from(hl7_string)?;

    // We can deep query message fields using the `query` functionality
    let postcode = message.query("PID.F11.C5"); // Field 11, Component 5
    assert_eq!(postcode, "35292");

    // If you have the potential for escape sequences in your data you can process those using `EscapeSequence`
    let charge_to_practice = message.query("OBR.F23");
    assert_eq!(charge_to_practice, r#"Joes Obs \T\ Gynae"#);

    let decoder = EscapeSequence::new(message.get_separators());
    let charge_to_practice = decoder.decode(charge_to_practice); // Handle the escape sequences
    assert_eq!(charge_to_practice, "Joes Obs & Gynae"); // converted the \T\ sequence to an ampersand

    Ok(())
}

fn get_sample_message() -> &'static str {
    "MSH|^~\\&|GHH LAB|ELAB-3|GHH OE|BLDG4|200202150930||ORU^R01|CNTRL-3456|P|2.4\rPID|||555-44-4444||EVERYWOMAN^EVE^E^^^^L|JONES|19620320|F|||153 FERNWOOD DR.^^STATESVILLE^OH^35292||(206)3345232|(206)752-121||||AC555444444||67-A4335^OH^20030520\rOBR|1|845439^GHH OE|1045813^GHH LAB|15545^GLUCOSE|||200202150730|||||||||555-55-5555^PRIMARY^PATRICIA P^^^^MD^^|||||||Joes Obs \\T\\ Gynae||F||||||444-44-4444^HIPPOCRATES^HOWARD H^^^^MD\rOBX|1|SN|1554-5^GLUCOSE^POST 12H CFST:MCNC:PT:SER/PLAS:QN||^182|mg/dl|70_105|H|||F"
}