Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
a8c6e39ac5
|
|||
62f2ce9268
|
@@ -6,3 +6,13 @@ const (
|
|||||||
SortASC SortDirection = "ASC"
|
SortASC SortDirection = "ASC"
|
||||||
SortDESC SortDirection = "DESC"
|
SortDESC SortDirection = "DESC"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (sd SortDirection) ToMongo() int {
|
||||||
|
if sd == SortASC {
|
||||||
|
return 1
|
||||||
|
} else if sd == SortDESC {
|
||||||
|
return -1
|
||||||
|
} else {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
package goext
|
||||||
|
|
||||||
const GoextVersion = "0.0.547"
|
const GoextVersion = "0.0.549"
|
||||||
|
|
||||||
const GoextVersionTimestamp = "2024-12-08T18:04:04+0100"
|
const GoextVersionTimestamp = "2024-12-10T13:24:06+0100"
|
||||||
|
@@ -4,11 +4,13 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ConvertStructToMapOpt struct {
|
type ConvertStructToMapOpt struct {
|
||||||
KeepJsonMarshalTypes bool
|
KeepJsonMarshalTypes bool
|
||||||
MaxDepth *int
|
MaxDepth *int
|
||||||
|
UseTagsAsKeys *string
|
||||||
}
|
}
|
||||||
|
|
||||||
func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
||||||
@@ -90,7 +92,21 @@ func reflectToMap(fv reflect.Value, depth int, opt ConvertStructToMapOpt) any {
|
|||||||
|
|
||||||
for i := 0; i < fv.NumField(); i++ {
|
for i := 0; i < fv.NumField(); i++ {
|
||||||
if fv.Type().Field(i).IsExported() {
|
if fv.Type().Field(i).IsExported() {
|
||||||
res[fv.Type().Field(i).Name] = reflectToMap(fv.Field(i), depth+1, opt)
|
|
||||||
|
k := fv.Type().Field(i).Name
|
||||||
|
if opt.UseTagsAsKeys != nil {
|
||||||
|
if tagval, ok := fv.Type().Field(i).Tag.Lookup(*opt.UseTagsAsKeys); ok {
|
||||||
|
if strings.Contains(tagval, ",") {
|
||||||
|
k = strings.TrimSpace(strings.Split(tagval, ",")[0])
|
||||||
|
} else {
|
||||||
|
k = strings.TrimSpace(tagval)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res[k] = reflectToMap(fv.Field(i), depth+1, opt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user