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
|
package element
import (
"fmt"
"strconv"
"github.com/mitch000001/go-hbci/charset"
"github.com/mitch000001/go-hbci/domain"
)
// NewReferencingMessage returns a new referencing message for the given
// dialogID and messageNumber
func NewReferencingMessage(dialogID string, messageNumber int) *ReferencingMessageDataElement {
r := &ReferencingMessageDataElement{
DialogID: NewIdentification(dialogID),
MessageNumber: NewNumber(messageNumber, 4),
}
r.DataElement = NewDataElementGroup(referenceMessageDEG, 2, r)
return r
}
// ReferencingMessageDataElement represents a reference to another message for
// a given dialog
type ReferencingMessageDataElement struct {
DataElement
DialogID *IdentificationDataElement
MessageNumber *NumberDataElement
}
// Val returns the value of r as domain.ReferencingMessage
func (r *ReferencingMessageDataElement) Val() domain.MessageReference {
return domain.MessageReference{
DialogID: r.DialogID.Val(),
MessageNumber: r.MessageNumber.Val(),
}
}
// IsValid returns true if the DialogID and MessageNumber are set and the
// underlying value is valid.
func (r *ReferencingMessageDataElement) IsValid() bool {
if r.DialogID == nil || r.MessageNumber == nil {
return false
}
return r.DataElement.IsValid()
}
// UnmarshalHBCI unmarshals value into r
func (r *ReferencingMessageDataElement) UnmarshalHBCI(value []byte) error {
elements, err := ExtractElements(value)
if len(elements) != 2 {
return fmt.Errorf("Malformed marshaled value")
}
dialogID := charset.ToUTF8(elements[0])
num, err := strconv.Atoi(charset.ToUTF8(elements[1]))
if err != nil {
return fmt.Errorf("%T: Malformed message number: %v", r, err)
}
*r = *NewReferencingMessage(dialogID, num)
return nil
}
// GroupDataElements returns the grouped DataElements
func (r *ReferencingMessageDataElement) GroupDataElements() []DataElement {
return []DataElement{
r.DialogID,
r.MessageNumber,
}
}
|