Skip to content

Commit 15d6ae7

Browse files
committed
hl7: allow round trip ACK triggers
1 parent 20a9f54 commit 15d6ae7

20 files changed

+69
-56
lines changed

decodeGroup.go

+18-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
type messageStructure interface {
10-
MessageStructureID() string
10+
MessageStructureID() []string
1111
}
1212

1313
func newWalker(list []any, registry Registry) (*walker, error) {
@@ -20,13 +20,24 @@ func newWalker(list []any, registry Registry) (*walker, error) {
2020
if !ok {
2121
return nil, fmt.Errorf("first message must implment MessageStructure, %T does not", root)
2222
}
23-
code := ms.MessageStructureID()
24-
if len(code) == 0 {
25-
return nil, fmt.Errorf("message structure code empty, malformed message: %#v", root)
23+
codeList := ms.MessageStructureID()
24+
if len(codeList) == 0 {
25+
return nil, fmt.Errorf("message structure code missing, malformed message: %#v", root)
2626
}
27-
vex, ok := registry.Trigger(code)
28-
if !ok {
29-
return nil, fmt.Errorf("message structure code not found %q", code)
27+
var vex any
28+
var code string
29+
for _, c := range codeList {
30+
if len(c) == 0 {
31+
return nil, fmt.Errorf("message structure code empty, malformed message: %#v", root)
32+
}
33+
vex, ok = registry.Trigger(c)
34+
if ok {
35+
code = c
36+
break
37+
}
38+
}
39+
if vex == nil {
40+
return nil, fmt.Errorf("message structure code not found %q", codeList)
3041
}
3142
tp := reflect.TypeOf(vex)
3243

h220/datatype.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h220/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h231/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h231/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h240/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h240/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h250/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h250/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h251/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h251/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h270/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h270/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h271/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h271/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h280/datatype.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

h280/segment.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

hl7fetch/template/datatype.go.template

+9-9
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,30 @@ type {{.ID}} struct {
2121
{{.ID}} {{.|typeprefix}}{{.DataType}} `hl7:"{{.|tag}}"` {{end}}
2222
}
2323
{{if eq .ID "MSG"}}
24-
func (d MSG) MessageStructureID() string {
24+
func (d MSG) MessageStructureID() []string {
2525
if len(d.MessageStructure) > 0 {
26-
return d.MessageStructure
26+
return []string{d.MessageStructure}
2727
}
2828
{{- if hasField "MessageCode" .Fields}}
2929
if len(d.TriggerEvent) == 0 {
30-
return d.MessageCode
30+
return []string{d.MessageCode}
3131
}
32-
return d.MessageCode + "_" + d.TriggerEvent;
32+
return []string{d.MessageCode + "_" + d.TriggerEvent, d.MessageCode};
3333
{{end -}}
3434
{{- if hasField "MessageType" .Fields}}
3535
if len(d.TriggerEvent) == 0 {
36-
return d.MessageType
36+
return []string{d.MessageType}
3737
}
38-
return d.MessageType + "_" + d.TriggerEvent;
38+
return []string{d.MessageType + "_" + d.TriggerEvent, d.MessageType};
3939
{{end -}}
4040
}
4141
{{end}}
4242
{{if eq .ID "CM_MSG"}}
43-
func (d CM_MSG) MessageStructureID() string {
43+
func (d CM_MSG) MessageStructureID() []string {
4444
if len(d.TriggerEvent) == 0 {
45-
return d.MessageType
45+
return []string{d.MessageType}
4646
}
47-
return d.MessageType + "_" + d.TriggerEvent
47+
return []string{d.MessageType + "_" + d.TriggerEvent, d.MessageType}
4848
}
4949
{{end}}
5050

hl7fetch/template/segment.go.template

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type {{.ID}} struct {
2121
{{if $mt}}
2222
// MessageStructureID returns the code for the message structure.
2323
// Implements the interface for decoders.
24-
func (s {{.ID}}) MessageStructureID () string {
24+
func (s {{.ID}}) MessageStructureID () []string {
2525
return s.{{$mt}}.MessageStructureID()
2626
}
2727
{{end}}

testdata/roundtrip/ack.hl7

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
MSH|^~\&|EnsembleHL7|ISC|A|B|20240528161200||ACK^R01|1716934339853485567|P|2.5|||||||||
2+
MSA|AA|1716934339853485567||||

0 commit comments

Comments
 (0)