1#[macro_use]
2extern crate serde;
3#[macro_use]
4extern crate failure;
5
6pub mod groups;
7mod macros;
8pub mod messages;
9pub mod segments;
10
11pub fn parse(input: &str) -> Vec<Box<segments::Segment>> {
12 vec![]
13}
14
15#[cfg(test)]
16mod tests {
17 use crate::messages::*;
18 use crate::segments::*;
19
20 const msg: &str = r#"MSH|^~\&|LAB|MYFAC|LAB||201411130917||ORU^R01|3216598|D|2.3|||AL|NE|
21PID|1|ABC123DF|AND234DA_PID3|PID_4_ALTID|Patlast^Patfirst^Mid||19670202|F|||4505 21 st^^LAKE COUNTRY^BC^V4V 2S7||222-555-8484|||||MF0050356/15|
22PV1|1|O|MYFACSOMPL||||^Xavarie^Sonna^^^^^XAVS|||||||||||REF||SELF|||||||||||||||||||MYFAC||REG|||201411071440||||||||23390^PV1_52Surname^PV1_52Given^H^^Dr^^PV1_52Mnemonic|
23ORC|RE|PT103933301.0100|||CM|N|||201411130917|^Kyle^Andra^J.^^^^KYLA||^Xavarie^Sonna^^^^^XAVS|MYFAC|
24OBR|1|PT1311:H00001R301.0100|PT1311:H00001R|301.0100^Complete Blood Count (CBC)^00065227^57021-8^CBC \T\ Auto Differential^pCLOCD|R||201411130914|||KYLA||||201411130914||^Xavarie^Sonna^^^^^XAVS||00065227||||201411130915||LAB|F||^^^^^R|^Xavarie^Sonna^^^^^XAVS|
25OBX|1|NM|301.0500^White Blood Count (WBC)^00065227^6690-2^Leukocytes^pCLOCD|1|10.1|10\S\9/L|3.1-9.7|H||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
26OBX|2|NM|301.0600^Red Blood Count (RBC)^00065227^789-8^Erythrocytes^pCLOCD|1|3.2|10\S\12/L|3.7-5.0|L||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
27OBX|3|NM|301.0700^Hemoglobin (HGB)^00065227^718-7^Hemoglobin^pCLOCD|1|140|g/L|118-151|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
28OBX|4|NM|301.0900^Hematocrit (HCT)^00065227^4544-3^Hematocrit^pCLOCD|1|0.34|L/L|0.33-0.45|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
29OBX|5|NM|301.1100^MCV^00065227^787-2^Mean Corpuscular Volume^pCLOCD|1|98.0|fL|84.0-98.0|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
30OBX|6|NM|301.1300^MCH^00065227^785-6^Mean Corpuscular Hemoglobin^pCLOCD|1|27.0|pg|28.3-33.5|L||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
31OBX|7|NM|301.1500^MCHC^00065227^786-4^Mean Corpuscular Hemoglobin Concentration^pCLOCD|1|330|g/L|329-352|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
32OBX|8|NM|301.1700^RDW^00065227^788-0^Erythrocyte Distribution Width^pCLOCD|1|12.0|%|12.0-15.0|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
33OBX|9|NM|301.1900^Platelets^00065227^777-3^Platelets^pCLOCD|1|125|10\S\9/L|147-375|L||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
34OBX|10|NM|301.2100^Neutrophils^00065227^751-8^Neutrophils^pCLOCD|1|8.0|10\S\9/L|1.2-6.0|H||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
35OBX|11|NM|301.2300^Lymphocytes^00065227^731-0^Lymphocytes^pCLOCD|1|1.0|10\S\9/L|0.6-3.1|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
36OBX|12|NM|301.2500^Monocytes^00065227^742-7^Monocytes^pCLOCD|1|1.0|10\S\9/L|0.1-0.9|H||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
37OBX|13|NM|301.2700^Eosinophils^00065227^711-2^Eosinophils^pCLOCD|1|0.0|10\S\9/L|0.0-0.5|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
38OBX|14|NM|301.2900^Basophils^00065227^704-7^Basophils^pCLOCD|1|0.0|10\S\9/L|0.0-0.2|N||A~S|F|||201411130916|MYFAC^MyFake Hospital^L|
39ZDR||^Xavarie^Sonna^^^^^XAVS^^^^^XX^^ATP|
40ZPR||"#;
41
42 #[test]
43 fn test_parse_msh() {
44 let tmp = r#"MSH|^~\&|LAB|MYFAC|LAB||201411130917||ORU^R01|3216598|D|2.3|||AL|NE|"#;
45 let msh: MSH = tmp.parse().unwrap();
46 assert_eq!(msh.msh_1_field_separator, "|");
47 assert_eq!(msh.msh_2_encoding_characters, "^~\\&");
48 assert_eq!(msh.msh_3_sending_application, Some("LAB".to_string()));
49 assert_eq!(msh.msh_4_sending_facility, Some("MYFAC".to_string()));
50 assert_eq!(msh.msh_5_receiving_application, Some("LAB".to_string()));
51 assert_eq!(msh.msh_6_receiving_facility, None);
52 assert_eq!(msh.msh_7_date_time_of_message, "201411130917");
53 assert_eq!(msh.msh_8_security, None);
54 assert_eq!(msh.msh_9_message_type, "ORU^R01");
55 assert_eq!(msh.msh_10_message_control_id, "3216598");
56 assert_eq!(msh.msh_11_processing_id, "D");
57 assert_eq!(msh.msh_12_version_id, "2.3");
58 assert_eq!(msh.msh_13_sequence_number, None);
59 assert_eq!(msh.msh_14_continuation_pointer, None);
60 assert_eq!(msh.msh_15_accept_acknowledgment_type, Some("AL".to_string()));
61 assert_eq!(
62 msh.msh_16_application_acknowledgment_type,
63 Some("NE".to_string())
64 );
65 }
66
67 #[test]
68 fn test_parse() {
69 let parsed: ORU_R01 = msg.parse().unwrap();
70 assert_eq!(3, 3);
71 }
72}