Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
8d52b41f57
|
|||
f47e2a33fe
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
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 {
|
type ConvertStructToMapOpt struct {
|
||||||
KeepJsonMarshalTypes bool
|
KeepJsonMarshalTypes bool
|
||||||
|
MaxDepth *int
|
||||||
}
|
}
|
||||||
|
|
||||||
func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
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]
|
opt = opts[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
res := reflectToMap(reflect.ValueOf(v), opt)
|
res := reflectToMap(reflect.ValueOf(v), 1, opt)
|
||||||
|
|
||||||
if v, ok := res.(map[string]any); ok {
|
if v, ok := res.(map[string]any); ok {
|
||||||
return v
|
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.Kind() == reflect.Ptr {
|
||||||
|
|
||||||
if fv.IsNil() {
|
if fv.IsNil() {
|
||||||
return nil
|
return nil
|
||||||
} else {
|
} 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()
|
arrlen := fv.Len()
|
||||||
arr := make([]any, arrlen)
|
arr := make([]any, arrlen)
|
||||||
for i := 0; i < arrlen; i++ {
|
for i := 0; i < arrlen; i++ {
|
||||||
arr[i] = reflectToMap(fv.Index(i), opt)
|
arr[i] = reflectToMap(fv.Index(i), depth+1, opt)
|
||||||
}
|
}
|
||||||
return arr
|
return arr
|
||||||
|
|
||||||
@@ -62,7 +67,7 @@ func reflectToMap(fv reflect.Value, opt ConvertStructToMapOpt) any {
|
|||||||
arrlen := fv.Len()
|
arrlen := fv.Len()
|
||||||
arr := make([]any, arrlen)
|
arr := make([]any, arrlen)
|
||||||
for i := 0; i < arrlen; i++ {
|
for i := 0; i < arrlen; i++ {
|
||||||
arr[i] = reflectToMap(fv.Index(i), opt)
|
arr[i] = reflectToMap(fv.Index(i), depth+1, opt)
|
||||||
}
|
}
|
||||||
return arr
|
return arr
|
||||||
|
|
||||||
@@ -85,7 +90,7 @@ func reflectToMap(fv reflect.Value, 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), 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/bsoncodec"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -245,6 +246,13 @@ func NewRFC3339(t time.Time) RFC3339Time {
|
|||||||
return RFC3339Time(t)
|
return RFC3339Time(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewRFC3339Ptr(t *time.Time) *RFC3339Time {
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return langext.Ptr(RFC3339Time(*t))
|
||||||
|
}
|
||||||
|
|
||||||
func NowRFC3339() RFC3339Time {
|
func NowRFC3339() RFC3339Time {
|
||||||
return RFC3339Time(time.Now())
|
return RFC3339Time(time.Now())
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -245,6 +246,13 @@ func NewRFC3339Nano(t time.Time) RFC3339NanoTime {
|
|||||||
return RFC3339NanoTime(t)
|
return RFC3339NanoTime(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewRFC3339NanoPtr(t *time.Time) *RFC3339NanoTime {
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return langext.Ptr(RFC3339NanoTime(*t))
|
||||||
|
}
|
||||||
|
|
||||||
func NowRFC3339Nano() RFC3339NanoTime {
|
func NowRFC3339Nano() RFC3339NanoTime {
|
||||||
return RFC3339NanoTime(time.Now())
|
return RFC3339NanoTime(time.Now())
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
@@ -239,6 +240,13 @@ func NewUnix(t time.Time) UnixTime {
|
|||||||
return UnixTime(t)
|
return UnixTime(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewUnixPtr(t *time.Time) *UnixTime {
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return langext.Ptr(UnixTime(*t))
|
||||||
|
}
|
||||||
|
|
||||||
func NowUnix() UnixTime {
|
func NowUnix() UnixTime {
|
||||||
return UnixTime(time.Now())
|
return UnixTime(time.Now())
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
@@ -239,6 +240,13 @@ func NewUnixMilli(t time.Time) UnixMilliTime {
|
|||||||
return UnixMilliTime(t)
|
return UnixMilliTime(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewUnixMilliPtr(t *time.Time) *UnixMilliTime {
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return langext.Ptr(UnixMilliTime(*t))
|
||||||
|
}
|
||||||
|
|
||||||
func NowUnixMilli() UnixMilliTime {
|
func NowUnixMilli() UnixMilliTime {
|
||||||
return UnixMilliTime(time.Now())
|
return UnixMilliTime(time.Now())
|
||||||
}
|
}
|
||||||
|
@@ -8,6 +8,7 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
"go.mongodb.org/mongo-driver/bson/bsoncodec"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
"go.mongodb.org/mongo-driver/bson/bsonrw"
|
||||||
"go.mongodb.org/mongo-driver/bson/bsontype"
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||||
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
@@ -239,6 +240,13 @@ func NewUnixNano(t time.Time) UnixNanoTime {
|
|||||||
return UnixNanoTime(t)
|
return UnixNanoTime(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewUnixNanoPtr(t *time.Time) *UnixNanoTime {
|
||||||
|
if t == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return langext.Ptr(UnixNanoTime(*t))
|
||||||
|
}
|
||||||
|
|
||||||
func NowUnixNano() UnixNanoTime {
|
func NowUnixNano() UnixNanoTime {
|
||||||
return UnixNanoTime(time.Now())
|
return UnixNanoTime(time.Now())
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user