Packages
hl7v2
3.4.0
3.10.1
3.9.0
3.8.0
3.7.0
3.6.0
3.5.0
3.4.0
3.3.6
3.3.5
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.0
3.1.1
3.1.0
3.0.2
3.0.1
3.0.0
2.11.0
2.10.0
2.9.1
2.9.0
2.8.2
2.8.1
2.8.0
2.7.1
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
1.4.6
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.0
1.1.0
1.0.0
0.6.0
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.1.0
Pure Elixir HL7 v2.x toolkit — schema-driven parsing, typed segments, message builder, MLLP transport
Current section
Files
Jump to
Current section
Files
lib/hl7v2/path.ex
defmodule HL7v2.Path do
@moduledoc """
Represents a validated HL7v2 path.
Created by the `~h` sigil at compile time or by `HL7v2.Path.parse/1` at runtime.
Pass to `HL7v2.get/2` or `HL7v2.fetch/2` for resolution.
## Path Syntax
"PID" — segment
"PID-5" — field 5
"PID-5.1" — component 1 of field 5
"PID-3[2]" — repetition 2 of field 3
"OBX[*]-5" — field 5 from ALL OBX segments (returns list)
"OBX[2]-5" — field 5 from the 2nd OBX segment
"PID-3[*]" — ALL repetitions of PID-3 (returns list)
"""
@enforce_keys [:raw, :segment]
defstruct [:raw, :segment, :segment_index, :field, :component, :repetition]
@type t :: %__MODULE__{
raw: binary(),
segment: binary(),
segment_index: pos_integer() | :all | nil,
field: pos_integer() | nil,
component: pos_integer() | nil,
repetition: pos_integer() | nil
}
@doc """
Parses a path string at runtime, returning `{:ok, path}` or `{:error, :invalid_path}`.
Prefer the `~h` sigil for compile-time validation when the path is a literal.
"""
@spec parse(binary()) :: {:ok, t()} | {:error, :invalid_path}
def parse(path) when is_binary(path) do
case HL7v2.Access.parse_path(path) do
{:ok, parsed} ->
{:ok,
%__MODULE__{
raw: path,
segment: parsed.segment,
segment_index: Map.get(parsed, :segment_index),
field: parsed.field,
component: parsed.component,
repetition: parsed.repetition
}}
{:error, _} = err ->
err
end
end
end