1 package mapx
2
3 import (
4 "errors"
5 "time"
6 )
7
8 var ErrKeyDoesNotExist = errors.New("key is not present in map")
9 var ErrKeyCanNotBeTypeAsserted = errors.New("key could not be type asserted")
10
11 func GetString(values map[interface{}]interface{}, key interface{}) (string, error) {
12 if v, ok := values[key]; !ok {
13 return "", ErrKeyDoesNotExist
14 } else if sv, ok := v.(string); !ok {
15 return "", ErrKeyCanNotBeTypeAsserted
16 } else {
17 return sv, nil
18 }
19 }
20
21 func GetStringSlice(values map[interface{}]interface{}, key interface{}) ([]string, error) {
22 if v, ok := values[key]; !ok {
23 return []string{}, ErrKeyDoesNotExist
24 } else if sv, ok := v.([]string); ok {
25 return sv, nil
26 } else if sv, ok := v.([]interface{}); ok {
27 vs := make([]string, len(sv))
28 for k, v := range sv {
29 if vv, ok := v.(string); !ok {
30 return []string{}, ErrKeyCanNotBeTypeAsserted
31 } else {
32 vs[k] = vv
33 }
34 }
35 return vs, nil
36 } else {
37 return []string{}, ErrKeyCanNotBeTypeAsserted
38 }
39 }
40
41 func GetTime(values map[interface{}]interface{}, key interface{}) (time.Time, error) {
42 v, ok := values[key]
43 if !ok {
44 return time.Time{}, ErrKeyDoesNotExist
45 }
46
47 if sv, ok := v.(time.Time); ok {
48 return sv, nil
49 } else if sv, ok := v.(int64); ok {
50 return time.Unix(sv, 0), nil
51 } else if sv, ok := v.(int32); ok {
52 return time.Unix(int64(sv), 0), nil
53 } else if sv, ok := v.(int); ok {
54 return time.Unix(int64(sv), 0), nil
55 } else if sv, ok := v.(float64); ok {
56 return time.Unix(int64(sv), 0), nil
57 } else if sv, ok := v.(float32); ok {
58 return time.Unix(int64(sv), 0), nil
59 }
60
61 return time.Time{}, ErrKeyCanNotBeTypeAsserted
62 }
63
64 func GetInt64(values map[interface{}]interface{}, key interface{}) (int64, error) {
65 if v, ok := values[key]; !ok {
66 return 0, ErrKeyDoesNotExist
67 } else if sv, ok := v.(int64); !ok {
68 return 0, ErrKeyCanNotBeTypeAsserted
69 } else {
70 return sv, nil
71 }
72 }
73
74 func GetInt32(values map[interface{}]interface{}, key interface{}) (int32, error) {
75 if v, ok := values[key]; !ok {
76 return 0, ErrKeyDoesNotExist
77 } else if sv, ok := v.(int32); ok {
78 return sv, nil
79 } else if sv, ok := v.(int); ok {
80 return int32(sv), nil
81 } else {
82 return 0, ErrKeyCanNotBeTypeAsserted
83 }
84 }
85
86 func GetInt(values map[interface{}]interface{}, key interface{}) (int, error) {
87 if v, ok := values[key]; !ok {
88 return 0, ErrKeyDoesNotExist
89 } else if sv, ok := v.(int32); ok {
90 return int(sv), nil
91 } else if sv, ok := v.(int); ok {
92 return sv, nil
93 } else {
94 return 0, ErrKeyCanNotBeTypeAsserted
95 }
96 }
97
98 func GetFloat32(values map[interface{}]interface{}, key interface{}) (float32, error) {
99 if v, ok := values[key]; !ok {
100 return 0, ErrKeyDoesNotExist
101 } else if sv, ok := v.(float32); !ok {
102 return 0, ErrKeyCanNotBeTypeAsserted
103 } else {
104 return sv, nil
105 }
106 }
107
108 func GetFloat64(values map[interface{}]interface{}, key interface{}) (float64, error) {
109 if v, ok := values[key]; !ok {
110 return 0, ErrKeyDoesNotExist
111 } else if sv, ok := v.(float64); !ok {
112 return 0, ErrKeyCanNotBeTypeAsserted
113 } else {
114 return sv, nil
115 }
116 }
117
118 func GetStringDefault(values map[interface{}]interface{}, key interface{}, defaultValue string) string {
119 if s, err := GetString(values, key); err == nil {
120 return s
121 }
122 return defaultValue
123 }
124
125 func GetStringSliceDefault(values map[interface{}]interface{}, key interface{}, defaultValue []string) []string {
126 if s, err := GetStringSlice(values, key); err == nil {
127 return s
128 }
129 return defaultValue
130 }
131
View as plain text