Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
8d52b41f57
|
|||
f47e2a33fe
|
@@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.433"
|
||||
const GoextVersion = "0.0.435"
|
||||
|
||||
const GoextVersionTimestamp = "2024-04-15T10:25:30+0200"
|
||||
const GoextVersionTimestamp = "2024-04-15T12:55:44+0200"
|
||||
|
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
type ConvertStructToMapOpt struct {
|
||||
KeepJsonMarshalTypes bool
|
||||
MaxDepth *int
|
||||
}
|
||||
|
||||
func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
||||
@@ -16,7 +17,7 @@ func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
||||
opt = opts[0]
|
||||
}
|
||||
|
||||
res := reflectToMap(reflect.ValueOf(v), opt)
|
||||
res := reflectToMap(reflect.ValueOf(v), 1, opt)
|
||||
|
||||
if v, ok := res.(map[string]any); ok {
|
||||
return v
|
||||
@@ -27,14 +28,18 @@ func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
||||
}
|
||||
}
|
||||
|
||||
func reflectToMap(fv reflect.Value, opt ConvertStructToMapOpt) any {
|
||||
func reflectToMap(fv reflect.Value, depth int, opt ConvertStructToMapOpt) any {
|
||||
|
||||
if opt.MaxDepth != nil && depth > *opt.MaxDepth {
|
||||
return fv.Interface()
|
||||
}
|
||||
|
||||
if fv.Kind() == reflect.Ptr {
|
||||
|
||||
if fv.IsNil() {
|
||||
return nil
|
||||
} else {
|
||||
return reflectToMap(fv.Elem(), opt)
|
||||
return reflectToMap(fv.Elem(), depth, opt)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -51,7 +56,7 @@ func reflectToMap(fv reflect.Value, opt ConvertStructToMapOpt) any {
|
||||
arrlen := fv.Len()
|
||||
arr := make([]any, arrlen)
|
||||
for i := 0; i < arrlen; i++ {
|
||||
arr[i] = reflectToMap(fv.Index(i), opt)
|
||||
arr[i] = reflectToMap(fv.Index(i), depth+1, opt)
|
||||
}
|
||||
return arr
|
||||
|
||||
@@ -62,7 +67,7 @@ func reflectToMap(fv reflect.Value, opt ConvertStructToMapOpt) any {
|
||||
arrlen := fv.Len()
|
||||
arr := make([]any, arrlen)
|
||||
for i := 0; i < arrlen; i++ {
|
||||
arr[i] = reflectToMap(fv.Index(i), opt)
|
||||
arr[i] = reflectToMap(fv.Index(i), depth+1, opt)
|
||||
}
|
||||
return arr
|
||||
|
||||
@@ -85,7 +90,7 @@ func reflectToMap(fv reflect.Value, opt ConvertStructToMapOpt) any {
|
||||
|
||||
for i := 0; i < fv.NumField(); i++ {
|
||||
if fv.Type().Field(i).IsExported() {
|
||||
res[fv.Type().Field(i).Name] = reflectToMap(fv.Field(i), opt)
|
||||
res[fv.Type().Field(i).Name] = reflectToMap(fv.Field(i), depth+1, opt)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -8,6 +8,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"reflect"
|
||||
"time"
|
||||
)
|
||||
@@ -245,6 +246,13 @@ func NewRFC3339(t time.Time) RFC3339Time {
|
||||
return RFC3339Time(t)
|
||||
}
|
||||
|
||||
func NewRFC3339Ptr(t *time.Time) *RFC3339Time {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return langext.Ptr(RFC3339Time(*t))
|
||||
}
|
||||
|
||||
func NowRFC3339() RFC3339Time {
|
||||
return RFC3339Time(time.Now())
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"reflect"
|
||||
"time"
|
||||
)
|
||||
@@ -245,6 +246,13 @@ func NewRFC3339Nano(t time.Time) RFC3339NanoTime {
|
||||
return RFC3339NanoTime(t)
|
||||
}
|
||||
|
||||
func NewRFC3339NanoPtr(t *time.Time) *RFC3339NanoTime {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return langext.Ptr(RFC3339NanoTime(*t))
|
||||
}
|
||||
|
||||
func NowRFC3339Nano() RFC3339NanoTime {
|
||||
return RFC3339NanoTime(time.Now())
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"time"
|
||||
@@ -239,6 +240,13 @@ func NewUnix(t time.Time) UnixTime {
|
||||
return UnixTime(t)
|
||||
}
|
||||
|
||||
func NewUnixPtr(t *time.Time) *UnixTime {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return langext.Ptr(UnixTime(*t))
|
||||
}
|
||||
|
||||
func NowUnix() UnixTime {
|
||||
return UnixTime(time.Now())
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"time"
|
||||
@@ -239,6 +240,13 @@ func NewUnixMilli(t time.Time) UnixMilliTime {
|
||||
return UnixMilliTime(t)
|
||||
}
|
||||
|
||||
func NewUnixMilliPtr(t *time.Time) *UnixMilliTime {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return langext.Ptr(UnixMilliTime(*t))
|
||||
}
|
||||
|
||||
func NowUnixMilli() UnixMilliTime {
|
||||
return UnixMilliTime(time.Now())
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"time"
|
||||
@@ -239,6 +240,13 @@ func NewUnixNano(t time.Time) UnixNanoTime {
|
||||
return UnixNanoTime(t)
|
||||
}
|
||||
|
||||
func NewUnixNanoPtr(t *time.Time) *UnixNanoTime {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return langext.Ptr(UnixNanoTime(*t))
|
||||
}
|
||||
|
||||
func NowUnixNano() UnixNanoTime {
|
||||
return UnixNanoTime(time.Now())
|
||||
}
|
||||
|
Reference in New Issue
Block a user