64 lines
1.8 KiB
Go
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"
|
|
}
|