Files
qfixpt/quickfix/datadictionary/xml.go
2026-03-12 12:08:34 -03:00

64 lines
1.8 KiB
Go

package datadictionary
import (
"encoding/xml"
)
// XMLDoc is the unmarshalled root of a FIX Dictionary.
type XMLDoc struct {
Type string `xml:"type,attr"`
Major string `xml:"major,attr"`
Minor string `xml:"minor,attr"`
ServicePack int `xml:"servicepack,attr"`
Header *XMLComponent `xml:"header"`
Trailer *XMLComponent `xml:"trailer"`
Messages []*XMLComponent `xml:"messages>message"`
Components []*XMLComponent `xml:"components>component"`
Fields []*XMLField `xml:"fields>field"`
}
// XMLComponent can represent header, trailer, messages/message, or components/component xml elements.
type XMLComponent struct {
Name string `xml:"name,attr"`
MsgCat string `xml:"msgcat,attr"`
MsgType string `xml:"msgtype,attr"`
Members []*XMLComponentMember `xml:",any"`
}
// XMLField represents the fields/field xml element.
type XMLField struct {
Number int `xml:"number,attr"`
Name string `xml:"name,attr"`
Type string `xml:"type,attr"`
Values []*XMLValue `xml:"value"`
}
// XMLValue represents the fields/field/value xml element.
type XMLValue struct {
Enum string `xml:"enum,attr"`
Description string `xml:"description,attr"`
}
// XMLComponentMember represents child elements of header, trailer, messages/message, and components/component elements.
type XMLComponentMember struct {
XMLName xml.Name
Name string `xml:"name,attr"`
Required string `xml:"required,attr"`
Members []*XMLComponentMember `xml:",any"`
}
func (member XMLComponentMember) isComponent() bool {
return member.XMLName.Local == "component"
}
func (member XMLComponentMember) isGroup() bool {
return member.XMLName.Local == "group"
}
func (member XMLComponentMember) isRequired() bool {
return member.Required == "Y"
}