-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathenums.go
322 lines (272 loc) · 10.5 KB
/
enums.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
package l5x
import (
"encoding/xml"
)
type ExternalAccess int
const (
ExternalAccessReadWrite ExternalAccess = iota
ExternalAccessReadOnly
)
var externalAccessNames = []string{"Read/Write", "Read Only"}
func (enum *ExternalAccess) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), externalAccessNames, d, start)
}
func (enum ExternalAccess) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), externalAccessNames, e, start)
}
func (enum *ExternalAccess) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), externalAccessNames, attr)
}
func (enum ExternalAccess) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), externalAccessNames, name)
}
func (enum ExternalAccess) String() string { return enumToString(int(enum), externalAccessNames) }
type Class int
const (
ClassUser Class = iota
)
var classNames = []string{"User"}
func (enum *Class) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), classNames, d, start)
}
func (enum Class) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), classNames, e, start)
}
func (enum *Class) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), classNames, attr)
}
func (enum Class) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), classNames, name)
}
func (enum Class) String() string { return enumToString(int(enum), classNames) }
type Radix int
const (
RadixDecimal Radix = iota
RadixNullType
RadixFloat
RadixBinary
RadixASCII
RadixHex
)
var radixNames = []string{"Decimal", "NullType", "Float", "Binary", "ASCII", "Hex"}
func (enum *Radix) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), radixNames, d, start)
}
func (enum Radix) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), radixNames, e, start)
}
func (enum *Radix) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), radixNames, attr)
}
func (enum Radix) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), radixNames, name)
}
func (enum Radix) String() string { return enumToString(int(enum), radixNames) }
type PortType int
const (
PortTypeEthernet PortType = iota
PortTypeCompact
)
var portTypeNames = []string{"Ethernet", "Compact"}
func (enum *PortType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), portTypeNames, d, start)
}
func (enum PortType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), portTypeNames, e, start)
}
func (enum *PortType) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), portTypeNames, attr)
}
func (enum PortType) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), portTypeNames, name)
}
func (enum PortType) String() string { return enumToString(int(enum), portTypeNames) }
type DataFormat int
const (
DataFormatDecorated DataFormat = iota
DataFormatL5K
DataFormatMessage
)
var dataFormatNames = []string{"Decorated", "L5K", "Message"}
func (enum *DataFormat) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), dataFormatNames, d, start)
}
func (enum DataFormat) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), dataFormatNames, e, start)
}
func (enum *DataFormat) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), dataFormatNames, attr)
}
func (enum DataFormat) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), dataFormatNames, name)
}
func (enum DataFormat) String() string { return enumToString(int(enum), dataFormatNames) }
type TaskType int
const (
TaskTypeContinuous TaskType = iota
)
var taskTypeNames = []string{"CONTINUOUS"}
func (enum *TaskType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), taskTypeNames, d, start)
}
func (enum TaskType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), taskTypeNames, e, start)
}
func (enum *TaskType) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), taskTypeNames, attr)
}
func (enum TaskType) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), taskTypeNames, name)
}
func (enum TaskType) String() string { return enumToString(int(enum), taskTypeNames) }
type DataTypeFamily int
const (
DataTypeFamilyNone DataTypeFamily = iota
DataTypeFamilyString
)
var dataTypeFamilyNames = []string{"NoFamily", "StringFamily"}
func (enum *DataTypeFamily) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), dataTypeFamilyNames, d, start)
}
func (enum DataTypeFamily) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), dataTypeFamilyNames, e, start)
}
func (enum *DataTypeFamily) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), dataTypeFamilyNames, attr)
}
func (enum DataTypeFamily) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), dataTypeFamilyNames, name)
}
func (enum DataTypeFamily) String() string { return enumToString(int(enum), dataTypeFamilyNames) }
type EKeyState int
const (
EKeyStateExactMatch EKeyState = iota
EKeyStateCompatibleModule
EKeyStateDisabled
)
var eKeyStateNames = []string{"ExactMatch", "CompatibleModule", "Disabled"}
func (enum *EKeyState) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), eKeyStateNames, d, start)
}
func (enum EKeyState) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), eKeyStateNames, e, start)
}
func (enum *EKeyState) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), eKeyStateNames, attr)
}
func (enum EKeyState) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), eKeyStateNames, name)
}
func (enum EKeyState) String() string { return enumToString(int(enum), eKeyStateNames) }
type IOType int
const (
IOTypeInput IOType = iota
IOTypeOutput
)
var ioTypeNames = []string{"Input", "Output"}
func (enum *IOType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), ioTypeNames, d, start)
}
func (enum IOType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), ioTypeNames, e, start)
}
func (enum *IOType) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), ioTypeNames, attr)
}
func (enum IOType) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), ioTypeNames, name)
}
func (enum IOType) String() string { return enumToString(int(enum), ioTypeNames) }
type TagType int
const (
TagTypeBase TagType = iota
)
var tagTypeNames = []string{"Base"}
func (enum *TagType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), tagTypeNames, d, start)
}
func (enum TagType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), tagTypeNames, e, start)
}
func (enum *TagType) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), tagTypeNames, attr)
}
func (enum TagType) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), tagTypeNames, name)
}
func (enum TagType) String() string { return enumToString(int(enum), tagTypeNames) }
type RoutineType int
const (
RoutineTypeRLL RoutineType = iota
RoutineTypeST
RoutineTypeFBD
)
var routineTypeNames = []string{"RLL", "ST", "FBD"}
func (enum *RoutineType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), routineTypeNames, d, start)
}
func (enum RoutineType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), routineTypeNames, e, start)
}
func (enum *RoutineType) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), routineTypeNames, attr)
}
func (enum RoutineType) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), routineTypeNames, name)
}
func (enum RoutineType) String() string { return enumToString(int(enum), routineTypeNames) }
type RungType int
const (
RungTypeN RungType = iota
)
var rungTypeNames = []string{"N"}
func (enum *RungType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return enumUnmarshalXML((*int)(enum), rungTypeNames, d, start)
}
func (enum RungType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return enumMarshalXML(int(enum), rungTypeNames, e, start)
}
func (enum *RungType) UnmarshalXMLAttr(attr xml.Attr) error {
return enumUnmarshalXMLAttr((*int)(enum), rungTypeNames, attr)
}
func (enum RungType) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return enumMarshalXMLAttr(int(enum), rungTypeNames, name)
}
func (enum RungType) String() string { return enumToString(int(enum), rungTypeNames) }
// The following functions are designed to make it easy to marshal/unmarshal enums.
// It always uses -1 and "Unknown" to indicate an unknown value. Otherwise,
// the enum is assumed to start at 0 without skipping any values.
// This would probably all be better using go generate.
func enumFromString(enum *int, names []string, str string) error {
for i, estr := range names {
if str == estr {
*enum = i
return nil
}
}
*enum = -1
return nil
}
func enumToString(enum int, names []string) string {
if enum < 0 || enum >= len(names) {
return "Unknown"
}
return names[enum]
}
func enumUnmarshalXML(enum *int, names []string, d *xml.Decoder, start xml.StartElement) error {
var str string
err := d.DecodeElement(&str, &start)
if err != nil {
return err
}
return enumFromString(enum, names, str)
}
func enumMarshalXML(enum int, names []string, e *xml.Encoder, start xml.StartElement) error {
return e.EncodeElement(enumToString(enum, names), start)
}
func enumUnmarshalXMLAttr(enum *int, names []string, attr xml.Attr) error {
return enumFromString(enum, names, attr.Value)
}
func enumMarshalXMLAttr(enum int, names []string, name xml.Name) (xml.Attr, error) {
return xml.Attr{Name: name, Value: enumToString(enum, names)}, nil
}