-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathjoneva_slice.go
More file actions
116 lines (92 loc) · 2.52 KB
/
joneva_slice.go
File metadata and controls
116 lines (92 loc) · 2.52 KB
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
package joneva
import "fmt"
func (j *Joneva) Slice(key string) ([]interface{}, error) {
valueInterface := j.Get(key)
if valueInterface == nil {
return nil, fmt.Errorf("%v: %w", key, ErrNotFound)
}
valueSlice, ok := j.Get(key).([]interface{})
if !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
return valueSlice, nil
}
func (j *Joneva) MustSlice(key string) []interface{} {
valueSlice, err := j.Slice(key)
if err != nil {
panic(err)
}
return valueSlice
}
func (j *Joneva) SliceBool(key string) ([]bool, error) {
valueInterface := j.Get(key)
if valueInterface == nil {
return nil, fmt.Errorf("%v: %w", key, ErrNotFound)
}
valueSlice, ok := j.Get(key).([]interface{})
if !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
valueSliceBool := make([]bool, len(valueSlice))
for key, value := range valueSlice {
if valueSliceBool[key], ok = value.(bool); !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
}
return valueSliceBool, nil
}
func (j *Joneva) MustSliceBool(key string) []bool {
valueSliceBool, err := j.SliceBool(key)
if err != nil {
panic(err)
}
return valueSliceBool
}
func (j *Joneva) SliceFloat64(key string) ([]float64, error) {
valueInterface := j.Get(key)
if valueInterface == nil {
return nil, fmt.Errorf("%v: %w", key, ErrNotFound)
}
valueSlice, ok := j.Get(key).([]interface{})
if !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
valueSliceFloat64 := make([]float64, len(valueSlice))
for key, value := range valueSlice {
if valueSliceFloat64[key], ok = value.(float64); !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
}
return valueSliceFloat64, nil
}
func (j *Joneva) MustSliceFloat64(key string) []float64 {
valueSliceFloat64, err := j.SliceFloat64(key)
if err != nil {
panic(err)
}
return valueSliceFloat64
}
func (j *Joneva) SliceString(key string) ([]string, error) {
valueInterface := j.Get(key)
if valueInterface == nil {
return nil, fmt.Errorf("%v: %w", key, ErrNotFound)
}
valueSlice, ok := j.Get(key).([]interface{})
if !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
valueSliceString := make([]string, len(valueSlice))
for key, value := range valueSlice {
if valueSliceString[key], ok = value.(string); !ok {
return nil, fmt.Errorf("%v: %w", key, ErrTypeMismatch)
}
}
return valueSliceString, nil
}
func (j *Joneva) MustSliceString(key string) []string {
valueSliceString, err := j.SliceString(key)
if err != nil {
panic(err)
}
return valueSliceString
}