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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
package domain
import (
"bytes"
"fmt"
"strings"
"time"
)
// NewMessageAcknowledgement creactes a new message acknowledgement
func NewMessageAcknowledgement(code int, referenceDataElement, text string, params []string) Acknowledgement {
return Acknowledgement{
Type: MessageAcknowledgement,
Code: code,
ReferenceDataElement: referenceDataElement,
Text: text,
Params: params,
}
}
// NewSegmentAcknowledgement creactes a new segment acknowledgement
func NewSegmentAcknowledgement(code int, referenceDataElement, text string, params []string) Acknowledgement {
return Acknowledgement{
Type: SegmentAcknowledgement,
Code: code,
ReferenceDataElement: referenceDataElement,
Text: text,
Params: params,
}
}
const (
// MessageAcknowledgement defines the message ack type
MessageAcknowledgement = "MessageAcknowledgement"
// SegmentAcknowledgement defines the segemtn ack type
SegmentAcknowledgement = "SegmentAcknowledgement"
)
// Acknowledgement represents an acknowledgement from the bank institute
type Acknowledgement struct {
Type string
Code int
ReferenceDataElement string
Text string
Params []string
ReferencingMessage MessageReference
ReferencingSegmentNumber int
}
func (a Acknowledgement) String() string {
var buf bytes.Buffer
fmt.Fprintf(&buf, "%s for message %d (%s)", a.Type, a.ReferencingMessage.MessageNumber, a.ReferencingMessage.DialogID)
if a.ReferencingSegmentNumber > 0 {
fmt.Fprintf(&buf, ", segment %d: ", a.ReferencingSegmentNumber)
} else {
fmt.Fprintf(&buf, ": ")
}
fmt.Fprintf(&buf, "Code: %d, ", a.Code)
if a.ReferenceDataElement != "" {
fmt.Fprintf(&buf, "Position: %s, ", a.ReferenceDataElement)
} else {
fmt.Fprintf(&buf, "Position: none, ")
}
fmt.Fprintf(&buf, "Text: '%s'", a.Text)
if len(a.Params) != 0 {
fmt.Fprintf(&buf, ", Parameters: %q", strings.Join(a.Params, ", "))
}
return buf.String()
}
// IsMessageAcknowledgement returns true if the type is MessageAcknowledgement, false otherwise
func (a Acknowledgement) IsMessageAcknowledgement() bool {
return a.Type == MessageAcknowledgement
}
// IsSegmentAcknowledgement returns true if type is SegmentAcknowledgement, false otherwise
func (a Acknowledgement) IsSegmentAcknowledgement() bool {
return a.Type == SegmentAcknowledgement
}
// IsError returns true if the acknowledgement represents an error
func (a Acknowledgement) IsError() bool {
return a.Code >= 9000
}
// IsWarning returns true if the acknowledgement represents a warning
func (a Acknowledgement) IsWarning() bool {
return a.Code >= 3000 && a.Code < 4000
}
// IsSuccess returns true if the acknowledgement represents a success
func (a Acknowledgement) IsSuccess() bool {
return a.Code > 0 && a.Code < 1000
}
// StatusAcknowledgement represents an Acknowledgement with a transmission date
type StatusAcknowledgement struct {
Acknowledgement
TransmittedAt time.Time
}
func (s StatusAcknowledgement) String() string {
var buf bytes.Buffer
fmt.Fprintf(&buf, "%s for message %d (%s)", s.Type, s.ReferencingMessage.MessageNumber, s.ReferencingMessage.DialogID)
if s.ReferencingSegmentNumber > 0 {
fmt.Fprintf(&buf, ", segment %d: ", s.ReferencingSegmentNumber)
} else {
fmt.Fprintf(&buf, ": ")
}
fmt.Fprintf(&buf, "Transmitted at: %s, ", s.TransmittedAt)
fmt.Fprintf(&buf, "Code: %d, ", s.Code)
if s.ReferenceDataElement != "" {
fmt.Fprintf(&buf, "Position: %s, ", s.ReferenceDataElement)
} else {
fmt.Fprintf(&buf, "Position: none, ")
}
fmt.Fprintf(&buf, "Text: '%s'", s.Text)
if len(s.Params) != 0 {
fmt.Fprintf(&buf, ", Parameters: %s", strings.Join(s.Params, ", "))
}
return buf.String()
}
|