Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions datadictionary/datadictionary.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,9 +288,6 @@ func NewMessageDef(name, msgType string, parts []MessagePart) *MessageDef {

if allowRequired && field.Required() {
msg.RequiredTags.Add(field.Tag())
for _, t := range field.requiredChildTags() {
msg.RequiredTags.Add(t)
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion datadictionary/message_def_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func TestNewMessageDef(t *testing.T) {
{
parts: []datadictionary.MessagePart{requiredGroup1},
expectedTags: datadictionary.TagSet{11: struct{}{}, 12: struct{}{}, 13: struct{}{}},
expectedRequiredTags: datadictionary.TagSet{11: struct{}{}, 13: struct{}{}},
expectedRequiredTags: datadictionary.TagSet{13: struct{}{}},
expectedRequiredParts: []datadictionary.MessagePart{requiredGroup1},
},
{
Expand Down
52 changes: 23 additions & 29 deletions validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,33 +31,32 @@ type fixtValidator struct {

//Validate tests the message against the provided data dictionary.
func (v *fixValidator) Validate(msg Message) MessageRejectError {
var msgType FIXString
if err := msg.Header.GetField(tagMsgType, &msgType); err != nil {
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
return RequiredTagMissing(tagMsgType)
} else {
return err
}
} else {
return validateFIX(v.dataDictionary, v.settings, string(msgType), msg)
if !msg.Header.Has(tagMsgType) {
return RequiredTagMissing(tagMsgType)
}
msgType, err := msg.Header.GetString(tagMsgType)
if err != nil {
return err
}

return validateFIX(v.dataDictionary, v.settings, msgType, msg)
}

//Validate tests the message against the provided transport and app data dictionaries.
//If the message is an admin message, it will be validated against the transport data dictionary.
func (v *fixtValidator) Validate(msg Message) MessageRejectError {
var msgType FIXString
if err := msg.Header.GetField(tagMsgType, &msgType); err != nil {
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
return RequiredTagMissing(tagMsgType)
} else {
return err
}
} else if isAdminMessageType(string(msgType)) {
return validateFIX(v.transportDataDictionary, v.settings, string(msgType), msg)
} else {
return validateFIXT(v.transportDataDictionary, v.appDataDictionary, v.settings, string(msgType), msg)
if !msg.Header.Has(tagMsgType) {
return RequiredTagMissing(tagMsgType)
}
msgType, err := msg.Header.GetString(tagMsgType)
if err != nil {
return err
}

if isAdminMessageType(msgType) {
return validateFIX(v.transportDataDictionary, v.settings, msgType, msg)
}
return validateFIXT(v.transportDataDictionary, v.appDataDictionary, v.settings, msgType, msg)
}

func validateFIX(d *datadictionary.DataDictionary, settings validatorSettings, msgType string, msg Message) MessageRejectError {
Expand Down Expand Up @@ -167,9 +166,8 @@ func validateVisitField(fieldDef *datadictionary.FieldDef, fields []tagValue) ([
var err MessageRejectError
if fields, err = validateVisitGroupField(fieldDef, fields); err != nil {
return nil, err
} else {
return fields, nil
}
return fields, nil
}

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

func validateRequiredFieldMap(msg Message, requiredTags map[int]struct{}, fieldMap FieldMap) MessageRejectError {
for required := range requiredTags {
field := new(FIXString)
if err := fieldMap.GetField(Tag(required), field); err != nil {
//FIXME: add "has..." method?
if err.RejectReason() == rejectReasonConditionallyRequiredFieldMissing {
return RequiredTagMissing(Tag(required))
}
return err
requiredTag := Tag(required)
if !fieldMap.Has(requiredTag) {
return RequiredTagMissing(requiredTag)
}
}

Expand Down