hl7_parser/
sub_component.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use std::ops::Range;

/// Represents an HL7v2 sub-component
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SubComponent {
    /// The range (in char indices) in the original message where the sub-component is located
    pub range: Range<usize>,
}

impl SubComponent {
    /// Given the source for the original message, extract the (raw) string for this sub-component
    ///
    /// # Arguments
    ///
    /// * `message_source` - A string slice representing the original message source that was parsed
    ///
    /// # Examples
    ///
    /// ```
    /// # use std::num::NonZeroUsize;
    /// # use hl7_parser::ParsedMessage;
    /// let message = include_str!("../test_assets/sample_oru_r01_generic.hl7");
    /// let message = ParsedMessage::parse(&message, true).expect("can parse message");
    ///
    /// let segment = message.segment("PID").expect("can get PID segment");
    /// let field = segment.field(NonZeroUsize::new(3).unwrap()).expect("can get field 3");
    /// let repeat = field.repeat(NonZeroUsize::new(1).unwrap()).expect("can get repeat 1");
    /// let component = repeat.component(NonZeroUsize::new(4).unwrap()).expect("can get component 4");
    /// let sub_component = component.sub_component(NonZeroUsize::new(3).unwrap()).expect("can get sub-component 3");
    ///
    /// assert_eq!(sub_component.source(message.source), "ISO");
    /// ```
    #[inline]
    pub fn source<'s>(&self, message_source: &'s str) -> &'s str {
        &message_source[self.range.clone()]
    }
}