Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
7e16e799e4
|
|||
890e16241d
|
@@ -9,6 +9,7 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -667,6 +668,28 @@ func (v MetaValue) rawValueForJson() any {
|
|||||||
}
|
}
|
||||||
return v.Value.(EnumWrap).ValueString
|
return v.Value.(EnumWrap).ValueString
|
||||||
}
|
}
|
||||||
|
if v.DataType == MDTFloat32 {
|
||||||
|
if math.IsNaN(float64(v.Value.(float32))) {
|
||||||
|
return "float64::NaN"
|
||||||
|
} else if math.IsInf(float64(v.Value.(float32)), +1) {
|
||||||
|
return "float64::+inf"
|
||||||
|
} else if math.IsInf(float64(v.Value.(float32)), -1) {
|
||||||
|
return "float64::-inf"
|
||||||
|
} else {
|
||||||
|
return v.Value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v.DataType == MDTFloat64 {
|
||||||
|
if math.IsNaN(v.Value.(float64)) {
|
||||||
|
return "float64::NaN"
|
||||||
|
} else if math.IsInf(v.Value.(float64), +1) {
|
||||||
|
return "float64::+inf"
|
||||||
|
} else if math.IsInf(v.Value.(float64), -1) {
|
||||||
|
return "float64::-inf"
|
||||||
|
} else {
|
||||||
|
return v.Value
|
||||||
|
}
|
||||||
|
}
|
||||||
return v.Value
|
return v.Value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
package goext
|
||||||
|
|
||||||
const GoextVersion = "0.0.379"
|
const GoextVersion = "0.0.381"
|
||||||
|
|
||||||
const GoextVersionTimestamp = "2024-01-19T17:30:20+0100"
|
const GoextVersionTimestamp = "2024-01-23T17:51:52+0100"
|
||||||
|
72
reflectext/convertToMap.go
Normal file
72
reflectext/convertToMap.go
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
package reflectext
|
||||||
|
|
||||||
|
import "reflect"
|
||||||
|
|
||||||
|
func ConvertStructToMap(v any) any {
|
||||||
|
return reflectToMap(reflect.ValueOf(v))
|
||||||
|
}
|
||||||
|
|
||||||
|
func reflectToMap(fv reflect.Value) any {
|
||||||
|
|
||||||
|
if fv.Kind() == reflect.Ptr {
|
||||||
|
|
||||||
|
if fv.IsNil() {
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return reflectToMap(fv.Elem())
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if fv.Kind() == reflect.Func {
|
||||||
|
|
||||||
|
// skip
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if fv.Kind() == reflect.Array {
|
||||||
|
|
||||||
|
arrlen := fv.Len()
|
||||||
|
arr := make([]any, arrlen)
|
||||||
|
for i := 0; i < arrlen; i++ {
|
||||||
|
arr[i] = reflectToMap(fv.Index(i))
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if fv.Kind() == reflect.Slice {
|
||||||
|
|
||||||
|
arrlen := fv.Len()
|
||||||
|
arr := make([]any, arrlen)
|
||||||
|
for i := 0; i < arrlen; i++ {
|
||||||
|
arr[i] = reflectToMap(fv.Index(i))
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if fv.Kind() == reflect.Chan {
|
||||||
|
|
||||||
|
// skip
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if fv.Kind() == reflect.Struct {
|
||||||
|
|
||||||
|
res := make(map[string]any)
|
||||||
|
|
||||||
|
for i := 0; i < fv.NumField(); i++ {
|
||||||
|
if fv.Type().Field(i).IsExported() {
|
||||||
|
res[fv.Type().Field(i).Name] = reflectToMap(fv.Field(i))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return fv.Interface()
|
||||||
|
}
|
Reference in New Issue
Block a user