Skip to content

Commit 3a9e364

Browse files
committed
makes some reject helpers public (#124)
1 parent cdbb553 commit 3a9e364

File tree

6 files changed

+49
-41
lines changed

6 files changed

+49
-41
lines changed

errors.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ func NewBusinessMessageRejectError(err string, rejectReason int, refTagID *Tag)
5656
return messageRejectError{text: err, rejectReason: rejectReason, refTagID: refTagID, isBusinessReject: true}
5757
}
5858

59-
//incorrectDataFormatForValue returns an error indicating a field that cannot be parsed as the type required.
60-
func incorrectDataFormatForValue(tag Tag) MessageRejectError {
59+
//IncorrectDataFormatForValue returns an error indicating a field that cannot be parsed as the type required.
60+
func IncorrectDataFormatForValue(tag Tag) MessageRejectError {
6161
return NewMessageRejectError("Incorrect data format for value", rejectReasonIncorrectDataFormatForValue, &tag)
6262
}
6363

@@ -87,18 +87,18 @@ func valueIsIncorrectNoTag() MessageRejectError {
8787
return NewMessageRejectError("Value is incorrect (out of range) for this tag", rejectReasonValueIsIncorrect, nil)
8888
}
8989

90-
//invalidMessageType returns an error to indicate an invalid message type
91-
func invalidMessageType() MessageRejectError {
90+
//InvalidMessageType returns an error to indicate an invalid message type
91+
func InvalidMessageType() MessageRejectError {
9292
return NewMessageRejectError("Invalid MsgType", rejectReasonInvalidMsgType, nil)
9393
}
9494

95-
//unsupportedMessageType returns an error to indicate an unhandled message.
96-
func unsupportedMessageType() MessageRejectError {
95+
//UnsupportedMessageType returns an error to indicate an unhandled message.
96+
func UnsupportedMessageType() MessageRejectError {
9797
return NewBusinessMessageRejectError("Unsupported Message Type", rejectReasonUnsupportedMessageType, nil)
9898
}
9999

100-
//tagNotDefinedForThisMessageType returns an error for an invalid tag appearing in a message.
101-
func tagNotDefinedForThisMessageType(tag Tag) MessageRejectError {
100+
//TagNotDefinedForThisMessageType returns an error for an invalid tag appearing in a message.
101+
func TagNotDefinedForThisMessageType(tag Tag) MessageRejectError {
102102
return NewMessageRejectError("Tag not defined for this message type", rejectReasonTagNotDefinedForThisMessageType, &tag)
103103
}
104104

@@ -107,8 +107,8 @@ func tagAppearsMoreThanOnce(tag Tag) MessageRejectError {
107107
return NewMessageRejectError("Tag appears more than once", rejectReasonTagAppearsMoreThanOnce, &tag)
108108
}
109109

110-
//requiredTagMissing returns a validation error when a required field cannot be found in a message.
111-
func requiredTagMissing(tag Tag) MessageRejectError {
110+
//RequiredTagMissing returns a validation error when a required field cannot be found in a message.
111+
func RequiredTagMissing(tag Tag) MessageRejectError {
112112
return NewMessageRejectError("Required tag missing", rejectReasonRequiredTagMissing, &tag)
113113
}
114114

@@ -122,13 +122,13 @@ func tagSpecifiedOutOfRequiredOrder(tag Tag) MessageRejectError {
122122
return NewMessageRejectError("Tag specified out of required order", rejectReasonTagSpecifiedOutOfRequiredOrder, &tag)
123123
}
124124

125-
//tagSpecifiedWithoutAValue returns a validation error for when a field has no value.
126-
func tagSpecifiedWithoutAValue(tag Tag) MessageRejectError {
125+
//TagSpecifiedWithoutAValue returns a validation error for when a field has no value.
126+
func TagSpecifiedWithoutAValue(tag Tag) MessageRejectError {
127127
return NewMessageRejectError("Tag specified without a value", rejectReasonTagSpecifiedWithoutAValue, &tag)
128128
}
129129

130-
//invalidTagNumber returns a validation error for messages with invalid tags.
131-
func invalidTagNumber(tag Tag) MessageRejectError {
130+
//InvalidTagNumber returns a validation error for messages with invalid tags.
131+
func InvalidTagNumber(tag Tag) MessageRejectError {
132132
return NewMessageRejectError("Invalid tag number", rejectReasonInvalidTagNumber, &tag)
133133
}
134134

field_map.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ func (m *FieldMap) init(ordering tagOrder) {
7272
m.tagOrder = ordering
7373
}
7474

75+
//Tags returns all of the Field Tags in this FieldMap
7576
func (m FieldMap) Tags() []Tag {
7677
tags := make([]Tag, 0, len(m.tagLookup))
7778
for t := range m.tagLookup {
@@ -81,29 +82,32 @@ func (m FieldMap) Tags() []Tag {
8182
return tags
8283
}
8384

85+
//Get parses out a field in this FieldMap. Returned reject may indicate the field is not present, or the field value is invalid.
8486
func (m FieldMap) Get(parser Field) MessageRejectError {
8587
return m.GetField(parser.Tag(), parser)
8688
}
8789

90+
//Has returns true if the Tag is present in this FieldMap
8891
func (m FieldMap) Has(tag Tag) bool {
8992
_, ok := m.tagLookup[tag]
9093
return ok
9194
}
9295

96+
//GetField parses of a field with Tag tag. Returned reject may indicate the field is not present, or the field value is invalid.
9397
func (m FieldMap) GetField(tag Tag, parser FieldValueReader) MessageRejectError {
9498
tagValues, ok := m.tagLookup[tag]
9599
if !ok {
96100
return ConditionallyRequiredFieldMissing(tag)
97101
}
98102

99103
if err := parser.Read(tagValues[0].Value); err != nil {
100-
return incorrectDataFormatForValue(tag)
104+
return IncorrectDataFormatForValue(tag)
101105
}
102106

103107
return nil
104108
}
105109

106-
// GetInt is a GetField wrapper for int fields
110+
//GetInt is a GetField wrapper for int fields
107111
func (m FieldMap) GetInt(tag Tag) (int, MessageRejectError) {
108112
var val FIXInt
109113
if err := m.GetField(tag, &val); err != nil {
@@ -112,7 +116,7 @@ func (m FieldMap) GetInt(tag Tag) (int, MessageRejectError) {
112116
return int(val), nil
113117
}
114118

115-
// GetString is a GetField wrapper for string fields
119+
//GetString is a GetField wrapper for string fields
116120
func (m FieldMap) GetString(tag Tag) (string, MessageRejectError) {
117121
var val FIXString
118122
if err := m.GetField(tag, &val); err != nil {
@@ -121,6 +125,7 @@ func (m FieldMap) GetString(tag Tag) (string, MessageRejectError) {
121125
return string(val), nil
122126
}
123127

128+
//GetGroup is a Get function specific to Group Fields.
124129
func (m FieldMap) GetGroup(parser *RepeatingGroup) MessageRejectError {
125130
tagValues, ok := m.tagLookup[parser.Tag]
126131
if !ok {
@@ -131,12 +136,13 @@ func (m FieldMap) GetGroup(parser *RepeatingGroup) MessageRejectError {
131136
if msgRejErr, ok := err.(MessageRejectError); ok {
132137
return msgRejErr
133138
}
134-
return incorrectDataFormatForValue(parser.Tag)
139+
return IncorrectDataFormatForValue(parser.Tag)
135140
}
136141

137142
return nil
138143
}
139144

145+
//SetField sets the field with Tag tag
140146
func (m FieldMap) SetField(tag Tag, field FieldValueWriter) FieldMap {
141147
tValues := make([]tagValue, 1)
142148
tValues[0].init(tag, field.Write())
@@ -149,13 +155,15 @@ func (m *FieldMap) Clear() {
149155
m.tagLookup = make(map[Tag][]tagValue)
150156
}
151157

158+
//Set is a setter for fields
152159
func (m FieldMap) Set(field FieldWriter) FieldMap {
153160
tValues := make([]tagValue, 1)
154161
tValues[0].init(field.Tag(), field.Write())
155162
m.tagLookup[field.Tag()] = tValues
156163
return m
157164
}
158165

166+
//SetGroup is a setter specific to group fields
159167
func (m FieldMap) SetGroup(field RepeatingGroup) FieldMap {
160168
m.tagLookup[field.Tag] = field.tagValues()
161169
return m

in_session.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,14 @@ func (state inSession) handleResendRequest(session *session, msg Message) (nextS
109109
var err error
110110
var beginSeqNoField FIXInt
111111
if err = msg.Body.GetField(tagBeginSeqNo, &beginSeqNoField); err != nil {
112-
return state.processReject(session, msg, requiredTagMissing(tagBeginSeqNo))
112+
return state.processReject(session, msg, RequiredTagMissing(tagBeginSeqNo))
113113
}
114114

115115
beginSeqNo := beginSeqNoField
116116

117117
var endSeqNoField FIXInt
118118
if err = msg.Body.GetField(tagEndSeqNo, &endSeqNoField); err != nil {
119-
return state.processReject(session, msg, requiredTagMissing(tagEndSeqNo))
119+
return state.processReject(session, msg, RequiredTagMissing(tagEndSeqNo))
120120
}
121121

122122
endSeqNo := int(endSeqNoField)
@@ -223,7 +223,7 @@ func (state inSession) doTargetTooLow(session *session, msg Message, rej targetT
223223

224224
origSendingTime := new(FIXUTCTimestamp)
225225
if err = msg.Header.GetField(tagOrigSendingTime, origSendingTime); err != nil {
226-
session.doReject(msg, requiredTagMissing(tagOrigSendingTime))
226+
session.doReject(msg, RequiredTagMissing(tagOrigSendingTime))
227227
return state
228228
}
229229

message_router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (c MessageRouter) tryRoute(beginString string, msgType string, msg Message,
7070
route, ok := c.routes[routeKey{fixVersion, msgType}]
7171

7272
if !ok {
73-
return unsupportedMessageType()
73+
return UnsupportedMessageType()
7474
}
7575

7676
return route(msg, sessionID)

session.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ func (s *session) checkTargetTooLow(msg Message) MessageRejectError {
382382
var seqNum FIXInt
383383
switch err := msg.Header.GetField(tagMsgSeqNum, &seqNum); {
384384
case err != nil:
385-
return requiredTagMissing(tagMsgSeqNum)
385+
return RequiredTagMissing(tagMsgSeqNum)
386386
case int(seqNum) < s.store.NextTargetMsgSeqNum():
387387
return targetTooLow{ReceivedTarget: int(seqNum), ExpectedTarget: s.store.NextTargetMsgSeqNum()}
388388
}
@@ -394,7 +394,7 @@ func (s *session) checkTargetTooHigh(msg Message) MessageRejectError {
394394
var seqNum FIXInt
395395
switch err := msg.Header.GetField(tagMsgSeqNum, &seqNum); {
396396
case err != nil:
397-
return requiredTagMissing(tagMsgSeqNum)
397+
return RequiredTagMissing(tagMsgSeqNum)
398398
case int(seqNum) > s.store.NextTargetMsgSeqNum():
399399
return targetTooHigh{ReceivedTarget: int(seqNum), ExpectedTarget: s.store.NextTargetMsgSeqNum()}
400400
}
@@ -411,13 +411,13 @@ func (s *session) checkCompID(msg Message) MessageRejectError {
411411

412412
switch {
413413
case haveSender != nil:
414-
return requiredTagMissing(tagSenderCompID)
414+
return RequiredTagMissing(tagSenderCompID)
415415
case haveTarget != nil:
416-
return requiredTagMissing(tagTargetCompID)
416+
return RequiredTagMissing(tagTargetCompID)
417417
case len(targetCompID) == 0:
418-
return tagSpecifiedWithoutAValue(tagTargetCompID)
418+
return TagSpecifiedWithoutAValue(tagTargetCompID)
419419
case len(senderCompID) == 0:
420-
return tagSpecifiedWithoutAValue(tagSenderCompID)
420+
return TagSpecifiedWithoutAValue(tagSenderCompID)
421421
case s.sessionID.SenderCompID != string(targetCompID) || s.sessionID.TargetCompID != string(senderCompID):
422422
return compIDProblem()
423423
}
@@ -427,7 +427,7 @@ func (s *session) checkCompID(msg Message) MessageRejectError {
427427

428428
func (s *session) checkSendingTime(msg Message) MessageRejectError {
429429
if ok := msg.Header.Has(tagSendingTime); !ok {
430-
return requiredTagMissing(tagSendingTime)
430+
return RequiredTagMissing(tagSendingTime)
431431
}
432432

433433
sendingTime := new(FIXUTCTimestamp)
@@ -446,7 +446,7 @@ func (s *session) checkBeginString(msg Message) MessageRejectError {
446446
var beginString FIXString
447447
switch err := msg.Header.GetField(tagBeginString, &beginString); {
448448
case err != nil:
449-
return requiredTagMissing(tagBeginString)
449+
return RequiredTagMissing(tagBeginString)
450450
case s.sessionID.BeginString != string(beginString):
451451
return incorrectBeginString{}
452452
}

validation.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (v *fixValidator) Validate(msg Message) MessageRejectError {
3434
var msgType FIXString
3535
if err := msg.Header.GetField(tagMsgType, &msgType); err != nil {
3636
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
37-
return requiredTagMissing(tagMsgType)
37+
return RequiredTagMissing(tagMsgType)
3838
} else {
3939
return err
4040
}
@@ -49,7 +49,7 @@ func (v *fixtValidator) Validate(msg Message) MessageRejectError {
4949
var msgType FIXString
5050
if err := msg.Header.GetField(tagMsgType, &msgType); err != nil {
5151
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
52-
return requiredTagMissing(tagMsgType)
52+
return RequiredTagMissing(tagMsgType)
5353
} else {
5454
return err
5555
}
@@ -114,7 +114,7 @@ func validateFIXT(transportDD, appDD *datadictionary.DataDictionary, settings va
114114

115115
func validateMsgType(d *datadictionary.DataDictionary, msgType string, msg Message) MessageRejectError {
116116
if _, validMsgType := d.Messages[msgType]; validMsgType == false {
117-
return invalidMessageType()
117+
return InvalidMessageType()
118118
}
119119
return nil
120120
}
@@ -142,7 +142,7 @@ func validateWalk(transportDD *datadictionary.DataDictionary, appDD *datadiction
142142
}
143143

144144
if fieldDef, ok = messageDef.Fields[int(tag)]; !ok {
145-
return tagNotDefinedForThisMessageType(tag)
145+
return TagNotDefinedForThisMessageType(tag)
146146
}
147147

148148
if _, duplicate := iteratedTags[int(tag)]; duplicate {
@@ -156,7 +156,7 @@ func validateWalk(transportDD *datadictionary.DataDictionary, appDD *datadiction
156156
}
157157

158158
if len(remainingFields) != 0 {
159-
return tagNotDefinedForThisMessageType(remainingFields[0].Tag)
159+
return TagNotDefinedForThisMessageType(remainingFields[0].Tag)
160160
}
161161

162162
return nil
@@ -180,7 +180,7 @@ func validateVisitGroupField(fieldDef *datadictionary.FieldDef, fieldStack []tag
180180
var numInGroup FIXInt
181181

182182
if err := numInGroup.Read(fieldStack[0].Value); err != nil {
183-
return nil, incorrectDataFormatForValue(numInGroupTag)
183+
return nil, IncorrectDataFormatForValue(numInGroupTag)
184184
}
185185

186186
fieldStack = fieldStack[1:]
@@ -208,7 +208,7 @@ func validateVisitGroupField(fieldDef *datadictionary.FieldDef, fieldStack []tag
208208
}
209209
} else {
210210
if childDefs[0].Required() {
211-
return fieldStack, requiredTagMissing(Tag(childDefs[0].Tag()))
211+
return fieldStack, RequiredTagMissing(Tag(childDefs[0].Tag()))
212212
}
213213
}
214214

@@ -265,7 +265,7 @@ func validateRequiredFieldMap(msg Message, requiredTags map[int]struct{}, fieldM
265265
if err := fieldMap.GetField(Tag(required), field); err != nil {
266266
//FIXME: add "has..." method?
267267
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
268-
return requiredTagMissing(Tag(required))
268+
return RequiredTagMissing(Tag(required))
269269
}
270270
return err
271271
}
@@ -297,11 +297,11 @@ func validateFields(transportDD *datadictionary.DataDictionary, appDD *datadicti
297297

298298
func validateField(d *datadictionary.DataDictionary, validFields datadictionary.TagSet, field tagValue) MessageRejectError {
299299
if len(field.Value) == 0 {
300-
return tagSpecifiedWithoutAValue(field.Tag)
300+
return TagSpecifiedWithoutAValue(field.Tag)
301301
}
302302

303303
if _, valid := d.FieldTypeByTag[int(field.Tag)]; !valid {
304-
return invalidTagNumber(field.Tag)
304+
return InvalidTagNumber(field.Tag)
305305
}
306306

307307
allowedValues := d.FieldTypeByTag[int(field.Tag)].Enums
@@ -380,7 +380,7 @@ func validateField(d *datadictionary.DataDictionary, validFields datadictionary.
380380
}
381381

382382
if err := prototype.Read(field.Value); err != nil {
383-
return incorrectDataFormatForValue(field.Tag)
383+
return IncorrectDataFormatForValue(field.Tag)
384384
}
385385

386386
return nil

0 commit comments

Comments
 (0)