-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtypes.go
128 lines (119 loc) · 2.43 KB
/
types.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
package pickle
import (
"math/big"
"strconv"
"github.com/lomik/og-rek"
)
func ToList(value interface{}) ([]interface{}, bool) {
if l, ok := value.([]interface{}); ok {
return l, ok
}
if l, ok := value.(ogórek.Tuple); ok {
return []interface{}(l), ok
}
return nil, false
}
func ToMap(value interface{}) (map[interface{}]interface{}, bool) {
if l, ok := value.(map[interface{}]interface{}); ok {
return l, ok
}
return nil, false
}
func ToString(value interface{}) (string, bool) {
if l, ok := value.(string); ok {
return l, ok
}
return "", false
}
func ToInt64(value interface{}) (int64, bool) {
switch value := value.(type) {
case float32:
return int64(value), true
case float64:
return int64(value), true
case int:
return int64(value), true
case int16:
return int64(value), true
case int32:
return int64(value), true
case int64:
return int64(value), true
case int8:
return int64(value), true
case uint:
return int64(value), true
case uint16:
return int64(value), true
case uint32:
return int64(value), true
case uint64:
return int64(value), true
case uint8:
return int64(value), true
case string:
v, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return 0, false
}
return v, true
case *big.Int:
return value.Int64(), true
case *big.Float:
v, _ := value.Int64()
return v, true
case big.Int:
return value.Int64(), true
case big.Float:
v, _ := value.Int64()
return v, true
default:
return 0, false
}
}
func ToFloat64(value interface{}) (float64, bool) {
switch value := value.(type) {
case float32:
return float64(value), true
case float64:
return float64(value), true
case int:
return float64(value), true
case int16:
return float64(value), true
case int32:
return float64(value), true
case int64:
return float64(value), true
case int8:
return float64(value), true
case uint:
return float64(value), true
case uint16:
return float64(value), true
case uint32:
return float64(value), true
case uint64:
return float64(value), true
case uint8:
return float64(value), true
case string:
v, err := strconv.ParseFloat(value, 64)
if err != nil {
return 0, false
}
return v, true
case *big.Int:
return float64(value.Int64()), true
case *big.Float:
v, _ := value.Float64()
return v, true
case big.Int:
return float64(value.Int64()), true
case big.Float:
v, _ := value.Float64()
return v, true
default:
return 0, false
}
}