/
valueType.go
85 lines (77 loc) · 1.68 KB
/
valueType.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
package eval
import (
sysl "github.com/anz-bank/sysl/pkg/sysl"
"github.com/pkg/errors"
)
type valueType int
// const definitions for various sysl.Value types
const (
ValueNoArg valueType = -1
ValueBool valueType = iota
ValueInt
ValueFloat
ValueString
ValueStringDecimal
ValueList
ValueMap
ValueSet
ValueNull
)
//nolint:gochecknoglobals
var valueTypeNames = map[valueType]string{
ValueNoArg: "ValueNoArg",
ValueBool: "ValueBool",
ValueInt: "ValueInt",
ValueFloat: "ValueFloat",
ValueString: "ValueString",
ValueStringDecimal: "ValueStringDecimal",
ValueList: "ValueList",
ValueMap: "ValueMap",
ValueSet: "ValueSet",
ValueNull: "ValueNull",
}
func (v valueType) String() string {
return valueTypeNames[v]
}
func getValueType(v *sysl.Value) valueType {
if v == nil {
return ValueNoArg
}
switch v.Value.(type) {
case *sysl.Value_B:
return ValueBool
case *sysl.Value_I:
return ValueInt
case *sysl.Value_D:
return ValueFloat
case *sysl.Value_S:
return ValueString
case *sysl.Value_Decimal:
return ValueStringDecimal
case *sysl.Value_Set:
return ValueSet
case *sysl.Value_List_:
return ValueList
case *sysl.Value_Map_:
return ValueMap
case *sysl.Value_Null_:
return ValueNull
default:
panic(errors.Errorf("exprOp: getValueType: unhandled type: %v", v))
}
}
func getContainedType(container *sysl.Value) valueType {
var list []*sysl.Value
switch x := container.Value.(type) {
case *sysl.Value_List_:
list = x.List.Value
case *sysl.Value_Set:
list = x.Set.Value
default:
return ValueNoArg
}
if len(list) == 0 {
return ValueNoArg
}
return getValueType(list[0])
}