Skip to content

Commit

Permalink
👔 up(map): update and enhance some util func logic
Browse files Browse the repository at this point in the history
  • Loading branch information
inhere committed Mar 2, 2023
1 parent 88c83fe commit 69dbc9a
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 19 deletions.
7 changes: 3 additions & 4 deletions maputil/convert.go
Expand Up @@ -21,12 +21,11 @@ func KeyToLower(src map[string]string) map[string]string {

// ToStringMap convert map[string]any to map[string]string
func ToStringMap(src map[string]any) map[string]string {
newMp := make(map[string]string, len(src))
strMp := make(map[string]string, len(src))
for k, v := range src {
newMp[k] = strutil.MustString(v)
strMp[k] = strutil.MustString(v)
}

return newMp
return strMp
}

// CombineToSMap combine two string-slice to SMap(map[string]string)
Expand Down
28 changes: 19 additions & 9 deletions maputil/data.go
Expand Up @@ -148,14 +148,15 @@ func (d Data) Bool(key string) bool {
if !ok {
return false
}
if bl, ok := val.(bool); ok {
return bl
}

if str, ok := val.(string); ok {
return strutil.QuietBool(str)
switch tv := val.(type) {
case string:
return strutil.QuietBool(tv)
case bool:
return tv
default:
return false
}
return false
}

// Strings get []string value
Expand Down Expand Up @@ -193,17 +194,26 @@ func (d Data) StringsByStr(key string) []string {
return nil
}

// StrMap get map[string]string value
func (d Data) StrMap(key string) map[string]string {
return d.StringMap(key)
}

// StringMap get map[string]string value
func (d Data) StringMap(key string) map[string]string {
val, ok := d.GetByPath(key)
if !ok {
return nil
}

if smp, ok := val.(map[string]string); ok {
return smp
switch tv := val.(type) {
case map[string]string:
return tv
case map[string]any:
return ToStringMap(tv)
default:
return nil
}
return nil
}

// Sub get sub value as new Data
Expand Down
16 changes: 11 additions & 5 deletions maputil/data_test.go
Expand Up @@ -11,18 +11,21 @@ import (

func TestData_usage(t *testing.T) {
mp := maputil.Data{
"k1": 23,
"k2": "ab",
"k3": "true",
"k4": false,
"k5": map[string]string{"a": "b"},
"k1": 23,
"k2": "ab",
"k3": "true",
"k4": false,
"k5": map[string]string{"a": "b"},
"anyMp": map[string]any{"b": 23},
}

assert.True(t, mp.Has("k1"))
assert.True(t, mp.Bool("k3"))
assert.False(t, mp.Bool("k4"))
assert.False(t, mp.IsEmtpy())
assert.Eq(t, 23, mp.Get("k1"))
assert.Eq(t, "b", mp.Get("k5.a"))
assert.Eq(t, 23, mp.Get("anyMp.b"))

// int
assert.Eq(t, 23, mp.Int("k1"))
Expand Down Expand Up @@ -52,6 +55,7 @@ func TestData_usage(t *testing.T) {

assert.Nil(t, mp.StringMap("notExists"))
assert.Eq(t, map[string]string{"a": "b"}, mp.StringMap("k5"))
assert.Eq(t, map[string]string{"b": "23"}, mp.StringMap("anyMp"))
}

func TestData_SetByPath(t *testing.T) {
Expand All @@ -60,6 +64,8 @@ func TestData_SetByPath(t *testing.T) {
"k5": map[string]any{"a": "v0"},
}
assert.Nil(t, mp.Get("k5.b"))
assert.Len(t, mp.Keys(), 2)
assert.NotEmpty(t, mp.ToStringMap())

err := mp.SetByPath("k5.b", "v2")
assert.NoErr(t, err)
Expand Down
9 changes: 8 additions & 1 deletion maputil/maputil.go
Expand Up @@ -23,7 +23,7 @@ func SimpleMerge(src, dst map[string]any) map[string]any {
return dst
}

if dst == nil {
if len(dst) == 0 {
return src
}

Expand All @@ -43,6 +43,13 @@ func MergeSMap(src, dst map[string]string, ignoreCase bool) map[string]string {

// MergeStringMap simple merge two string map. merge src to dst map
func MergeStringMap(src, dst map[string]string, ignoreCase bool) map[string]string {
if len(src) == 0 {
return dst
}
if len(dst) == 0 {
return src
}

for k, v := range src {
if ignoreCase {
k = strings.ToLower(k)
Expand Down

0 comments on commit 69dbc9a

Please sign in to comment.