/
element.go
124 lines (111 loc) · 2.57 KB
/
element.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package parser
type element struct {
Imports mapofImports
Types mapofTypes
Consts mapofConsts
Structs mapofStructs
Messages mapofMessages
}
const elementTmpl = `
// generated with github.com/Bridgevine/wsdlgo; DO NOT EDIT
{{if ne .Name "" -}}
package {{.Name}}
{{end}}
{{with .Element.Imports}}
import (
{{range . -}}
"{{.}}"
{{end}}
)
{{end}}
{{with .Element.Types}}
// Definition of types
type (
{{range . -}}
{{.Name}} {{.UnderlyingType}}
{{end}}
)
{{end}}
{{with .Element.Consts}}
// Constants associated with types defined above
const (
{{range . -}}
{{.Name}} {{.Type}} = "{{.Value}}"
{{end}}
)
{{end}}
{{with .Element.Structs}}
{{range $i, $e := .}}
type {{$i}} struct {
{{range $e.Fields -}}
{{.Name}} {{.Type}} {{.Tag}}
{{end}}
}
{{if $e.NillableRequiredType}}
// MarshalXML satisfies the XML Marshaler interface for type {{$i}}.
func (t {{$i}}) MarshalXML(e *xml.Encoder, s xml.StartElement) error {
{{range $e.Fields}}{{$t := .Type | removePackage | convertPointerToValue -}}
if t.{{$t}} == nil {
return e.EncodeElement("", s)
}
{{if eq .Type "Time"}}
tt := time.Time(*t.Time)
if tt.IsZero() {
return e.EncodeElement("", s)
}
{{end}}
return e.EncodeElement(t.{{$t}}, s)
{{- end}}
}
{{end}}
{{if $e.Marshaler}}
func (t {{$i}}) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return e.EncodeElement(struct {
{{range $e.EncoderFields -}}
{{.Name}} {{.Type}} {{.Tag}}
{{end}}
}{
{{range $e.EncoderFields -}}
{{.Name}} : t.{{.Name}},
{{end}}
}, start)
}
{{end}}
{{end}}
{{end}}
{{with .Element.Messages}}
{{range $i, $e := .}}
{{if $e.Type}}
type {{$i}} struct {
{{with $e.XMLField -}}
{{.Name}} {{.Type}} {{.Tag}}
{{end}}
{{$e.Type}}
}
{{if $e.Marshaler}}
func (t {{$i}}) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
if t.{{$e.Type | convertPointerToValue}} == nil {
return nil
}
x := t.{{$e.Type | convertPointerToValue}}.{{$e.Struct}}
start.Name = xml.Name{Local: "{{$e.LocalName}}"}
return e.EncodeElement(struct {
{{range $i, $e := $e.NSFields -}}
{{$i}} {{$e.Type}} {{$e.Tag}}
{{end -}}
{{range $e.Fields -}}
{{.Name}} {{.Type}} {{.Tag}}
{{end}}
}{
{{range $i, $e := $e.NSFields -}}
{{$i}} : "{{$e.Name}}",
{{end -}}
{{range $e.Fields -}}
{{.Name}} : x.{{.Name}},
{{end}}
}, start)
}
{{end}}
{{end}}
{{end}}
{{end}}`