Skip to content

Commit 38d9e0c

Browse files
committed
fixes required group validation error (#129)
1 parent 2121245 commit 38d9e0c

File tree

3 files changed

+24
-33
lines changed

3 files changed

+24
-33
lines changed

datadictionary/datadictionary.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,6 @@ func NewMessageDef(name, msgType string, parts []MessagePart) *MessageDef {
288288

289289
if allowRequired && field.Required() {
290290
msg.RequiredTags.Add(field.Tag())
291-
for _, t := range field.requiredChildTags() {
292-
msg.RequiredTags.Add(t)
293-
}
294291
}
295292
}
296293

datadictionary/message_def_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func TestNewMessageDef(t *testing.T) {
5959
{
6060
parts: []datadictionary.MessagePart{requiredGroup1},
6161
expectedTags: datadictionary.TagSet{11: struct{}{}, 12: struct{}{}, 13: struct{}{}},
62-
expectedRequiredTags: datadictionary.TagSet{11: struct{}{}, 13: struct{}{}},
62+
expectedRequiredTags: datadictionary.TagSet{13: struct{}{}},
6363
expectedRequiredParts: []datadictionary.MessagePart{requiredGroup1},
6464
},
6565
{

validation.go

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,33 +31,32 @@ type fixtValidator struct {
3131

3232
//Validate tests the message against the provided data dictionary.
3333
func (v *fixValidator) Validate(msg Message) MessageRejectError {
34-
var msgType FIXString
35-
if err := msg.Header.GetField(tagMsgType, &msgType); err != nil {
36-
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
37-
return RequiredTagMissing(tagMsgType)
38-
} else {
39-
return err
40-
}
41-
} else {
42-
return validateFIX(v.dataDictionary, v.settings, string(msgType), msg)
34+
if !msg.Header.Has(tagMsgType) {
35+
return RequiredTagMissing(tagMsgType)
36+
}
37+
msgType, err := msg.Header.GetString(tagMsgType)
38+
if err != nil {
39+
return err
4340
}
41+
42+
return validateFIX(v.dataDictionary, v.settings, msgType, msg)
4443
}
4544

4645
//Validate tests the message against the provided transport and app data dictionaries.
4746
//If the message is an admin message, it will be validated against the transport data dictionary.
4847
func (v *fixtValidator) Validate(msg Message) MessageRejectError {
49-
var msgType FIXString
50-
if err := msg.Header.GetField(tagMsgType, &msgType); err != nil {
51-
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
52-
return RequiredTagMissing(tagMsgType)
53-
} else {
54-
return err
55-
}
56-
} else if isAdminMessageType(string(msgType)) {
57-
return validateFIX(v.transportDataDictionary, v.settings, string(msgType), msg)
58-
} else {
59-
return validateFIXT(v.transportDataDictionary, v.appDataDictionary, v.settings, string(msgType), msg)
48+
if !msg.Header.Has(tagMsgType) {
49+
return RequiredTagMissing(tagMsgType)
50+
}
51+
msgType, err := msg.Header.GetString(tagMsgType)
52+
if err != nil {
53+
return err
54+
}
55+
56+
if isAdminMessageType(msgType) {
57+
return validateFIX(v.transportDataDictionary, v.settings, msgType, msg)
6058
}
59+
return validateFIXT(v.transportDataDictionary, v.appDataDictionary, v.settings, msgType, msg)
6160
}
6261

6362
func validateFIX(d *datadictionary.DataDictionary, settings validatorSettings, msgType string, msg Message) MessageRejectError {
@@ -167,9 +166,8 @@ func validateVisitField(fieldDef *datadictionary.FieldDef, fields []tagValue) ([
167166
var err MessageRejectError
168167
if fields, err = validateVisitGroupField(fieldDef, fields); err != nil {
169168
return nil, err
170-
} else {
171-
return fields, nil
172169
}
170+
return fields, nil
173171
}
174172

175173
return fields[1:], nil
@@ -261,13 +259,9 @@ func validateRequired(transportDD *datadictionary.DataDictionary, appDD *datadic
261259

262260
func validateRequiredFieldMap(msg Message, requiredTags map[int]struct{}, fieldMap FieldMap) MessageRejectError {
263261
for required := range requiredTags {
264-
field := new(FIXString)
265-
if err := fieldMap.GetField(Tag(required), field); err != nil {
266-
//FIXME: add "has..." method?
267-
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
268-
return RequiredTagMissing(Tag(required))
269-
}
270-
return err
262+
requiredTag := Tag(required)
263+
if !fieldMap.Has(requiredTag) {
264+
return RequiredTagMissing(requiredTag)
271265
}
272266
}
273267

0 commit comments

Comments
 (0)