diff --git a/cast.go b/cast.go index dee6787..9c607fa 100644 --- a/cast.go +++ b/cast.go @@ -37,6 +37,11 @@ func ToStringMapString(i interface{}) map[string]string { return v } +func ToStringMapBool(i interface{}) map[string]bool { + v, _ := ToStringMapBoolE(i) + return v +} + func ToStringMap(i interface{}) map[string]interface{} { v, _ := ToStringMapE(i) return v diff --git a/cast_test.go b/cast_test.go index 56623de..76effc9 100644 --- a/cast_test.go +++ b/cast_test.go @@ -40,7 +40,9 @@ func TestToString(t *testing.T) { func TestMaps(t *testing.T) { var taxonomies = map[interface{}]interface{}{"tag": "tags", "group": "groups"} + var stringMapBool = map[interface{}]interface{}{"v1": true, "v2": false} assert.Equal(t, ToStringMap(taxonomies), map[string]interface{}{"tag": "tags", "group": "groups"}) + assert.Equal(t, ToStringMapBool(stringMapBool), map[string]bool{"v1": true, "v2": false}) } func TestToBool(t *testing.T) { @@ -53,7 +55,7 @@ func TestToBool(t *testing.T) { assert.Equal(t, ToBool("F"), false) assert.Equal(t, ToBool(false), false) assert.Equal(t, ToBool("foo"), false) - + assert.Equal(t, ToBool("true"), true) assert.Equal(t, ToBool("TRUE"), true) assert.Equal(t, ToBool("True"), true) diff --git a/caste.go b/caste.go index d8b1aa9..c8ccb4c 100644 --- a/caste.go +++ b/caste.go @@ -161,6 +161,30 @@ func ToStringMapStringE(i interface{}) (map[string]string, error) { return m, fmt.Errorf("Unable to Cast %#v to map[string]string", i) } +func ToStringMapBoolE(i interface{}) (map[string]bool, error) { + jww.DEBUG.Println("ToStringMapBoolE called on type:", reflect.TypeOf(i)) + + var m = map[string]bool{} + + switch v := i.(type) { + case map[interface{}]interface{}: + for k, val := range v { + m[ToString(k)] = ToBool(val) + } + return m, nil + case map[string]interface{}: + for k, val := range v { + m[ToString(k)] = ToBool(val) + } + return m, nil + case map[string]bool: + return v, nil + default: + return m, fmt.Errorf("Unable to Cast %#v to map[string]bool", i) + } + return m, fmt.Errorf("Unable to Cast %#v to map[string]bool", i) +} + func ToStringMapE(i interface{}) (map[string]interface{}, error) { jww.DEBUG.Println("ToStringMapE called on type:", reflect.TypeOf(i))