#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct Ii {
pub root: String,
pub extension: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct Cd {
pub code: String,
pub code_system: Option<String>,
pub display_name: Option<String>,
}
impl Ii {
#[must_use]
pub(crate) fn from_element(element: &hl7_v2_xml_lite_helper::Element) -> Option<Ii> {
let root = element.attribute("root")?.to_string();
let extension = element.attribute("extension").map(str::to_string);
Some(Ii { root, extension })
}
}
impl Cd {
#[must_use]
pub(crate) fn from_element(element: &hl7_v2_xml_lite_helper::Element) -> Option<Cd> {
let code = element.attribute("code")?.to_string();
let code_system = element.attribute("codeSystem").map(str::to_string);
let display_name = element.attribute("displayName").map(str::to_string);
Some(Cd {
code,
code_system,
display_name,
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ii_reads_root_and_extension() {
let element = hl7_v2_xml_lite_helper::parse(
r#"<id root="2.16.840.1.113883.19.5" extension="12345"/>"#,
)
.unwrap();
let ii = Ii::from_element(&element).unwrap();
assert_eq!(ii.root, "2.16.840.1.113883.19.5");
assert_eq!(ii.extension.as_deref(), Some("12345"));
}
#[test]
fn ii_extension_is_optional() {
let element =
hl7_v2_xml_lite_helper::parse(r#"<id root="2.16.840.1.113883.19.5"/>"#).unwrap();
let ii = Ii::from_element(&element).unwrap();
assert_eq!(ii.extension, None);
}
#[test]
fn ii_with_no_root_is_none() {
let element = hl7_v2_xml_lite_helper::parse(r#"<id extension="12345"/>"#).unwrap();
assert_eq!(Ii::from_element(&element), None);
}
#[test]
fn cd_reads_code_system_and_display_name() {
let element = hl7_v2_xml_lite_helper::parse(
r#"<code code="OBS" codeSystem="2.16.840.1.113883.5.6" displayName="Observation"/>"#,
)
.unwrap();
let cd = Cd::from_element(&element).unwrap();
assert_eq!(cd.code, "OBS");
assert_eq!(cd.code_system.as_deref(), Some("2.16.840.1.113883.5.6"));
assert_eq!(cd.display_name.as_deref(), Some("Observation"));
}
#[test]
fn cd_with_no_code_is_none() {
let element =
hl7_v2_xml_lite_helper::parse(r#"<code displayName="Observation"/>"#).unwrap();
assert_eq!(Cd::from_element(&element), None);
}
}