HL7v2 message parsing in Rust.
Parses the structure of HL7v2 messages, but does not validate the correctness of the messages.
Examples
Parsing a Message
use Message;
use NonZeroUsize;
let message = r#"
MSH|^~\&|AccMgr|1|||20050110045504||ADT^A01|599102|P|2.3|||
PID|1||10006579^^^1^MRN^1||DUCK^DONALD^D||19241010|M||1|111 DUCK ST^^FOWL^CA^999990000^^M|1|8885551212|8885551212|1|2||40007716^^^AccMgr^VN^1|123121234|||||||||||NO NK1|1|DUCK^HUEY|SO|3583 DUCK RD^^FOWL^CA^999990000|8885552222||Y||||||||||||||
PV1|1|I|PREOP^101^1^1^^^S|3|||37^DISNEY^WALT^^^^^^AccMgr^^^^CI|||01||||1|||37^DISNEY^WALT^^^^^^AccMgr^^^^CI|2|40007716^^^AccMgr^VN|4|||||||||||||||||||1||G|||20050110045253||||||
"#.replace.replace;
let message = parse.expect;
let message_type = message.get_field_source;
assert_eq!;
Querying a Message
use Message;
let message = include_str!
.replace
.replace;
let message = parse.expect;
let trigger_event = message.query_value.expect;
assert_eq!;
Locating the Cursor Within A Message
(The cursor being the character index of some point within the buffer)
use Message;
use NonZeroUsize;
let message = r#"
MSH|^~\&|AccMgr|1|||20050110045504||ADT^A01|599102|P|2.3|||
PID|1||10006579^^^1^MRN^1||DUCK^DONALD^D||19241010|M||1|111 DUCK ST^^FOWL^CA^999990000^^M|1|8885551212|8885551212|1|2||40007716^^^AccMgr^VN^1|123121234|||||||||||NO NK1|1|DUCK^HUEY|SO|3583 DUCK RD^^FOWL^CA^999990000|8885552222||Y||||||||||||||
PV1|1|I|PREOP^101^1^1^^^S|3|||37^DISNEY^WALT^^^^^^AccMgr^^^^CI|||01||||1|||37^DISNEY^WALT^^^^^^AccMgr^^^^CI|2|40007716^^^AccMgr^VN|4|||||||||||||||||||1||G|||20050110045253||||||
"#.replace.replace;
let message = parse.expect;
let location = message.locate_cursor;
assert_eq!;
assert_eq!;
assert_eq!;
Parsing Message Timestamps
use parse_time;
let ts = "20230312195905-0700";
let ts = parse_time.expect;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
Decoding Encoded Strings
use Separators;
let separators = default;
assert_eq!;