Add ToIntSlice
diff --git a/cast.go b/cast.go
index fe382ca..1dde519 100644
--- a/cast.go
+++ b/cast.go
@@ -61,3 +61,8 @@
v, _ := ToStringSliceE(i)
return v
}
+
+func ToIntSlice(i interface{}) []int {
+ v, _ := ToIntSliceE(i)
+ return v
+}
diff --git a/cast_test.go b/cast_test.go
index c428ba5..b4c8382 100644
--- a/cast_test.go
+++ b/cast_test.go
@@ -77,6 +77,13 @@
assert.Equal(t, ToStringMapBool(stringMapBool), map[string]bool{"v1": true, "v2": false})
}
+func TestSlices(t *testing.T) {
+ assert.Equal(t, []string{"a", "b"}, ToStringSlice([]string{"a", "b"}))
+ assert.Equal(t, []string{"1", "3"}, ToStringSlice([]interface{}{1, 3}))
+ assert.Equal(t, []int{1, 3}, ToIntSlice([]int{1, 3}))
+ assert.Equal(t, []int{1, 3}, ToIntSlice([]interface{}{1.2, 3.2}))
+}
+
func TestToBool(t *testing.T) {
assert.Equal(t, ToBool(0), false)
assert.Equal(t, ToBool(nil), false)
diff --git a/caste.go b/caste.go
index 72c7690..db8b9fb 100644
--- a/caste.go
+++ b/caste.go
@@ -318,6 +318,26 @@
return a, fmt.Errorf("Unable to Cast %#v to []string", i)
}
+func ToIntSliceE(i interface{}) ([]int, error) {
+ jww.DEBUG.Println("ToIntSliceE called on type:", reflect.TypeOf(i))
+
+ var a []int
+
+ switch v := i.(type) {
+ case []interface{}:
+ for _, u := range v {
+ a = append(a, ToInt(u))
+ }
+ return a, nil
+ case []int:
+ return v, nil
+ default:
+ return a, fmt.Errorf("Unable to Cast %#v to []int", i)
+ }
+
+ return a, fmt.Errorf("Unable to Cast %#v to []int", i)
+}
+
func StringToDate(s string) (time.Time, error) {
return parseDateWith(s, []string{
time.RFC3339,