Skip to content

Commit 8bddd0b

Browse files
author
Chris Busbey
committed
generate new for components
1 parent f4505ff commit 8bddd0b

File tree

523 files changed

+2895
-150
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

523 files changed

+2895
-150
lines changed

_gen/generate-components/main.go

Lines changed: 41 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
var (
1717
pkg string
1818
fixSpec *datadictionary.DataDictionary
19-
imports map[string]bool
2019
)
2120

2221
func usage() {
@@ -33,26 +32,6 @@ func initPackage() {
3332
}
3433
}
3534

36-
func packageString() (s string) {
37-
s = fmt.Sprintf("package %v\n", pkg)
38-
return
39-
}
40-
41-
func genComponentImports() (fileOut string) {
42-
43-
if len(imports) == 0 {
44-
return
45-
}
46-
47-
fileOut += "import(\n"
48-
for i := range imports {
49-
fileOut += fmt.Sprintf("\"%v\"\n", i)
50-
}
51-
fileOut += ")\n"
52-
53-
return
54-
}
55-
5635
type group struct {
5736
parent string
5837
field *datadictionary.FieldDef
@@ -74,28 +53,10 @@ func collectGroups(parent string, part datadictionary.MessagePart, groups []grou
7453
return groups
7554
}
7655

77-
func writeFieldDeclaration(part datadictionary.MessagePart, componentName string) string {
78-
switch field := part.(type) {
79-
case datadictionary.Component:
80-
imports[fmt.Sprintf("github.com/quickfixgo/quickfix/%v/%v", pkg, strings.ToLower(field.Name()))] = true
81-
case *datadictionary.FieldDef:
82-
if !field.IsGroup() {
83-
goType := gen.FixFieldTypeToGoType(field.Type)
84-
if goType == "time.Time" {
85-
imports["time"] = true
86-
}
87-
}
88-
}
89-
90-
return gen.WriteFieldDeclaration(fixSpec.Major, fixSpec.Minor, part, componentName)
91-
}
92-
9356
func genGroupDeclaration(field *datadictionary.FieldDef, parent string) (fileOut string) {
9457
fileOut += fmt.Sprintf("//%v is a repeating group in %v\n", field.Name(), parent)
9558
fileOut += fmt.Sprintf("type %v struct {\n", field.Name())
96-
for _, groupField := range field.Parts {
97-
fileOut += writeFieldDeclaration(groupField, field.Name())
98-
}
59+
fileOut += gen.WriteFieldDeclarations(fixSpec.Major, fixSpec.Minor, field.Parts, field.Name())
9960

10061
fileOut += "}\n"
10162

@@ -116,22 +77,22 @@ func genGroupDeclarations(name string, fields []datadictionary.MessagePart) (fil
11677
}
11778

11879
func genHeader(header *datadictionary.MessageDef) {
119-
imports = make(map[string]bool)
120-
121-
//delay field output to determine imports
122-
delayOut := genGroupDeclarations("Header", header.Parts)
123-
delayOut += fmt.Sprintf("//Header is the %v Header type\n", pkg)
124-
delayOut += "type Header struct {\n"
125-
for _, field := range header.Parts {
126-
delayOut += writeFieldDeclaration(field, "Header")
80+
writer := new(bytes.Buffer)
81+
if err := gen.WritePackage(writer, pkg); err != nil {
82+
panic(err)
83+
}
84+
if err := gen.WriteComponentImports(writer, pkg, header.Parts); err != nil {
85+
panic(err)
12786
}
128-
delayOut += "}\n"
12987

130-
fileOut := packageString()
131-
fileOut += genComponentImports()
132-
fileOut += delayOut
88+
fileOut := writer.String()
89+
fileOut += genGroupDeclarations("Header", header.Parts)
90+
fileOut += fmt.Sprintf("//Header is the %v Header type\n", pkg)
91+
fileOut += "type Header struct {\n"
92+
fileOut += gen.WriteFieldDeclarations(fixSpec.Major, fixSpec.Minor, header.Parts, "Header")
93+
fileOut += "}\n"
13394

134-
writer := new(bytes.Buffer)
95+
writer = new(bytes.Buffer)
13596
if err := gen.WriteFieldSetters(writer, "Header", header.Parts); err != nil {
13697
panic(err)
13798
}
@@ -141,16 +102,21 @@ func genHeader(header *datadictionary.MessageDef) {
141102
}
142103

143104
func genTrailer(trailer *datadictionary.MessageDef) {
144-
imports = make(map[string]bool)
145-
fileOut := packageString()
105+
writer := new(bytes.Buffer)
106+
if err := gen.WritePackage(writer, pkg); err != nil {
107+
panic(err)
108+
}
109+
if err := gen.WriteComponentImports(writer, pkg, trailer.Parts); err != nil {
110+
panic(err)
111+
}
112+
fileOut := writer.String()
113+
146114
fileOut += fmt.Sprintf("//Trailer is the %v Trailer type\n", pkg)
147115
fileOut += "type Trailer struct {\n"
148-
for _, field := range trailer.Parts {
149-
fileOut += writeFieldDeclaration(field, "Trailer")
150-
}
116+
fileOut += gen.WriteFieldDeclarations(fixSpec.Major, fixSpec.Minor, trailer.Parts, "Trailer")
151117
fileOut += "}\n"
152118

153-
writer := new(bytes.Buffer)
119+
writer = new(bytes.Buffer)
154120
if err := gen.WriteFieldSetters(writer, "Trailer", trailer.Parts); err != nil {
155121
panic(err)
156122
}
@@ -160,29 +126,32 @@ func genTrailer(trailer *datadictionary.MessageDef) {
160126
}
161127

162128
func genComponent(name string, component *datadictionary.ComponentType) {
163-
imports = make(map[string]bool)
164-
165-
//delay output to determine imports
166-
delayOut := genGroupDeclarations(name, component.Parts)
167-
delayOut += fmt.Sprintf("//%v is a %v Component\n", name, pkg)
168-
delayOut += fmt.Sprintf("type %v struct {\n", name)
169-
for _, field := range component.Parts {
170-
delayOut += writeFieldDeclaration(field, name)
129+
writer := new(bytes.Buffer)
130+
if err := gen.WritePackage(writer, strings.ToLower(name)); err != nil {
131+
panic(err)
132+
}
133+
if err := gen.WriteComponentImports(writer, pkg, component.Parts()); err != nil {
134+
panic(err)
171135
}
172-
delayOut += "}\n"
173136

174-
fileOut := fmt.Sprintf("package %v\n", strings.ToLower(name))
175-
fileOut += genComponentImports()
176-
fileOut += delayOut
137+
if err := gen.WriteNewComponent(writer, *component); err != nil {
138+
panic(err)
139+
}
177140

141+
fileOut := writer.String()
142+
fileOut += genGroupDeclarations(name, component.Parts())
143+
fileOut += fmt.Sprintf("//%v is a %v Component\n", name, pkg)
144+
fileOut += fmt.Sprintf("type %v struct {\n", name)
145+
fileOut += gen.WriteFieldDeclarations(fixSpec.Major, fixSpec.Minor, component.Parts(), name)
146+
fileOut += "}\n"
178147
fileOut += genComponentSetters(component)
179148

180149
gen.WriteFile(path.Join(pkg, strings.ToLower(name), name+".go"), fileOut)
181150
}
182151

183152
func genComponentSetters(component *datadictionary.ComponentType) string {
184153
writer := new(bytes.Buffer)
185-
if err := gen.WriteFieldSetters(writer, component.Name(), component.Parts); err != nil {
154+
if err := gen.WriteFieldSetters(writer, component.Name(), component.Parts()); err != nil {
186155
panic(err)
187156
}
188157

_gen/generate-messages/main.go

Lines changed: 14 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ var (
1818
pkg string
1919
fixSpec *datadictionary.DataDictionary
2020
sortedMsgTypes []string
21-
imports map[string]bool
2221
)
2322

2423
func usage() {
@@ -41,43 +40,10 @@ func genMessages() {
4140
}
4241
}
4342

44-
func genMessageImports() string {
45-
fileOut := `
46-
import(
47-
"github.com/quickfixgo/quickfix"
48-
"github.com/quickfixgo/quickfix/enum"
49-
`
50-
fileOut += fmt.Sprintf("\"github.com/quickfixgo/quickfix/%v\"\n", headerTrailerPkg())
51-
52-
for i := range imports {
53-
fileOut += fmt.Sprintf("\"%v\"\n", i)
54-
}
55-
fileOut += ")\n"
56-
return fileOut
57-
}
58-
59-
func writeFieldDeclaration(part datadictionary.MessagePart, componentName string) string {
60-
switch field := part.(type) {
61-
case datadictionary.Component:
62-
imports[fmt.Sprintf("github.com/quickfixgo/quickfix/%v/%v", pkg, strings.ToLower(field.Name()))] = true
63-
case *datadictionary.FieldDef:
64-
if !field.IsGroup() {
65-
goType := gen.FixFieldTypeToGoType(field.Type)
66-
if goType == "time.Time" {
67-
imports["time"] = true
68-
}
69-
}
70-
}
71-
72-
return gen.WriteFieldDeclaration(fixSpec.Major, fixSpec.Minor, part, componentName)
73-
}
74-
7543
func genGroupDeclaration(field *datadictionary.FieldDef, parent string) (fileOut string) {
7644
fileOut += fmt.Sprintf("//%v is a repeating group in %v\n", field.Name(), parent)
7745
fileOut += fmt.Sprintf("type %v struct {\n", field.Name())
78-
for _, groupField := range field.Parts {
79-
fileOut += writeFieldDeclaration(groupField, field.Name())
80-
}
46+
fileOut += gen.WriteFieldDeclarations(fixSpec.Major, fixSpec.Minor, field.Parts, field.Name())
8147

8248
fileOut += "}\n"
8349

@@ -125,24 +91,13 @@ func genGroupDeclarations(msg *datadictionary.MessageDef) (fileOut string) {
12591
return
12692
}
12793

128-
func headerTrailerPkg() string {
129-
switch pkg {
130-
case "fix50", "fix50sp1", "fix50sp2":
131-
return "fixt11"
132-
}
133-
134-
return pkg
135-
}
136-
13794
func genMessage(msg *datadictionary.MessageDef) string {
13895
fileOut := fmt.Sprintf("//Message is a %v FIX Message\n", msg.Name)
13996
fileOut += "type Message struct {\n"
14097
fileOut += fmt.Sprintf("FIXMsgType string `fix:\"%v\"`\n", msg.MsgType)
141-
fileOut += fmt.Sprintf("%v.Header\n", headerTrailerPkg())
142-
for _, field := range msg.Parts {
143-
fileOut += writeFieldDeclaration(field, msg.Name)
144-
}
145-
fileOut += fmt.Sprintf("%v.Trailer\n", headerTrailerPkg())
98+
fileOut += fmt.Sprintf("%v.Header\n", gen.HeaderTrailerPkg(pkg))
99+
fileOut += gen.WriteFieldDeclarations(fixSpec.Major, fixSpec.Minor, msg.Parts, msg.Name)
100+
fileOut += fmt.Sprintf("%v.Trailer\n", gen.HeaderTrailerPkg(pkg))
146101
fileOut += "}\n"
147102
fileOut += "//Marshal converts Message to a quickfix.Message instance\n"
148103
fileOut += "func (m Message) Marshal() quickfix.Message {return quickfix.Marshal(m)}\n"
@@ -192,18 +147,18 @@ func Route(router RouteOut) (string,string,quickfix.MessageRoute) {
192147

193148
func genMessagePkg(msg *datadictionary.MessageDef) {
194149
pkgName := strings.ToLower(msg.Name)
195-
imports = make(map[string]bool)
196-
197150
fileOut := fmt.Sprintf("//Package %v msg type = %v.\n", pkgName, msg.MsgType)
198-
fileOut += fmt.Sprintf("package %v\n", pkgName)
199151

200-
//run through group and message declarations to collect required imports first
201-
delayOut := ""
202-
delayOut += genGroupDeclarations(msg)
203-
delayOut += genMessage(msg)
204-
205-
fileOut += genMessageImports()
206-
fileOut += delayOut
152+
writer := new(bytes.Buffer)
153+
if err := gen.WritePackage(writer, pkgName); err != nil {
154+
panic(err)
155+
}
156+
if err := gen.WriteMessageImports(writer, pkg, msg.Parts); err != nil {
157+
panic(err)
158+
}
159+
fileOut += writer.String()
160+
fileOut += genGroupDeclarations(msg)
161+
fileOut += genMessage(msg)
207162
fileOut += genMessageSetters(msg)
208163
fileOut += genMessageRoute(msg)
209164

0 commit comments

Comments
 (0)