update metadata utils

This commit is contained in:
ginuerzh
2022-12-21 18:18:23 +08:00
parent ba87494cef
commit 36ed0eae2d

View File

@ -8,66 +8,90 @@ import (
"github.com/go-gost/core/metadata" "github.com/go-gost/core/metadata"
) )
func GetBool(md metadata.Metadata, key string) (v bool) { func GetBool(md metadata.Metadata, keys ...string) (v bool) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case bool: case bool:
return vv v = vv
case int: case int:
return vv != 0 v = vv != 0
case string: case string:
v, _ = strconv.ParseBool(vv) v, _ = strconv.ParseBool(vv)
return
} }
break
}
return return
} }
func GetInt(md metadata.Metadata, key string) (v int) { func GetInt(md metadata.Metadata, keys ...string) (v int) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case bool: case bool:
if vv { if vv {
v = 1 v = 1
} }
case int: case int:
return vv v = vv
case string: case string:
v, _ = strconv.Atoi(vv) v, _ = strconv.Atoi(vv)
return
} }
break
}
return return
} }
func GetFloat(md metadata.Metadata, key string) (v float64) { func GetFloat(md metadata.Metadata, keys ...string) (v float64) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case float64: case float64:
return vv v = vv
case int: case int:
return float64(vv) v = float64(vv)
case string: case string:
v, _ = strconv.ParseFloat(vv, 64) v, _ = strconv.ParseFloat(vv, 64)
return }
break
} }
return return
} }
func GetDuration(md metadata.Metadata, key string) (v time.Duration) { func GetDuration(md metadata.Metadata, keys ...string) (v time.Duration) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case int: case int:
return time.Duration(vv) * time.Second v = time.Duration(vv) * time.Second
case string: case string:
v, _ = time.ParseDuration(vv) v, _ = time.ParseDuration(vv)
if v == 0 { if v == 0 {
@ -75,14 +99,21 @@ func GetDuration(md metadata.Metadata, key string) (v time.Duration) {
v = time.Duration(n) * time.Second v = time.Duration(n) * time.Second
} }
} }
break
}
return return
} }
func GetString(md metadata.Metadata, key string) (v string) { func GetString(md metadata.Metadata, keys ...string) (v string) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case string: case string:
v = vv v = vv
@ -101,15 +132,22 @@ func GetString(md metadata.Metadata, key string) (v string) {
case float64: case float64:
v = strconv.FormatFloat(float64(vv), 'f', -1, 64) v = strconv.FormatFloat(float64(vv), 'f', -1, 64)
} }
break
}
return return
} }
func GetStrings(md metadata.Metadata, key string) (ss []string) { func GetStrings(md metadata.Metadata, keys ...string) (ss []string) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch v := md.Get(key).(type) { switch v := md.Get(key).(type) {
case []string: case []string:
ss = v ss = v
@ -120,31 +158,45 @@ func GetStrings(md metadata.Metadata, key string) (ss []string) {
} }
} }
} }
break
}
return return
} }
func GetStringMap(md metadata.Metadata, key string) (m map[string]any) { func GetStringMap(md metadata.Metadata, keys ...string) (m map[string]any) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case map[string]any: case map[string]any:
return vv m = vv
case map[any]any: case map[any]any:
m = make(map[string]any) m = make(map[string]any)
for k, v := range vv { for k, v := range vv {
m[fmt.Sprintf("%v", k)] = v m[fmt.Sprintf("%v", k)] = v
} }
} }
break
}
return return
} }
func GetStringMapString(md metadata.Metadata, key string) (m map[string]string) { func GetStringMapString(md metadata.Metadata, keys ...string) (m map[string]string) {
if md == nil || !md.IsExists(key) { if md == nil {
return return
} }
for _, key := range keys {
if !md.IsExists(key) {
continue
}
switch vv := md.Get(key).(type) { switch vv := md.Get(key).(type) {
case map[string]any: case map[string]any:
m = make(map[string]string) m = make(map[string]string)
@ -157,5 +209,8 @@ func GetStringMapString(md metadata.Metadata, key string) (m map[string]string)
m[fmt.Sprintf("%v", k)] = fmt.Sprintf("%v", v) m[fmt.Sprintf("%v", k)] = fmt.Sprintf("%v", v)
} }
} }
break
}
return return
} }