Add license
This commit is contained in:
82
struct.go
82
struct.go
@@ -147,6 +147,31 @@ func MapToStruct(m map[string]any, o any) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func BsonToMap(b bson.M) map[string]any {
|
||||
result := make(map[string]any)
|
||||
|
||||
for k, v := range b {
|
||||
switch val := v.(type) {
|
||||
case bson.M:
|
||||
result[k] = BsonToMap(val)
|
||||
case []interface{}:
|
||||
arr := make([]any, len(val))
|
||||
for i, item := range val {
|
||||
if nested, ok := item.(bson.M); ok {
|
||||
arr[i] = BsonToMap(nested)
|
||||
} else {
|
||||
arr[i] = item
|
||||
}
|
||||
}
|
||||
result[k] = arr
|
||||
default:
|
||||
result[k] = val
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
type WrapA struct {
|
||||
Items []map[string]any
|
||||
}
|
||||
@@ -281,3 +306,60 @@ func StructCopyMatching(source, target any) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetWithDefault
|
||||
func GetWithDefault(m map[string]any, path string, def any) any {
|
||||
keys := strings.Split(path, ".")
|
||||
|
||||
var current any = m
|
||||
|
||||
for _, k := range keys {
|
||||
if m2, ok := current.(map[string]any); ok {
|
||||
if val, exists := m2[k]; exists {
|
||||
current = val
|
||||
} else {
|
||||
return def
|
||||
}
|
||||
} else {
|
||||
return def
|
||||
}
|
||||
}
|
||||
|
||||
return current
|
||||
}
|
||||
|
||||
func GetStringWithDefault(m map[string]any, path, def string) string {
|
||||
a := GetWithDefault(m, path, def)
|
||||
|
||||
return a.(string)
|
||||
}
|
||||
|
||||
func GetString(m map[string]any, path string) string {
|
||||
a := Get(m, path)
|
||||
|
||||
if a == nil {
|
||||
return ""
|
||||
} else {
|
||||
return a.(string)
|
||||
}
|
||||
}
|
||||
|
||||
func Get(m map[string]any, path string) any {
|
||||
keys := strings.Split(path, ".")
|
||||
|
||||
var current any = m
|
||||
|
||||
for _, k := range keys {
|
||||
if m2, ok := current.(map[string]any); ok {
|
||||
if val, exists := m2[k]; exists {
|
||||
current = val
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
return current
|
||||
}
|
||||
Reference in New Issue
Block a user