Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
2e713c808d
|
|||
6602f86b43
|
|||
24d9f0fdc7
|
|||
8446b2da22
|
2
go.mod
2
go.mod
@@ -28,7 +28,7 @@ require (
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/uuid v1.5.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.17.7 // indirect
|
||||
github.com/klauspost/compress v1.17.8 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
||||
github.com/leodido/go-urn v1.4.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
|
2
go.sum
2
go.sum
@@ -73,6 +73,8 @@ github.com/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2e
|
||||
github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
|
||||
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
|
||||
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
|
||||
github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc=
|
||||
github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
|
@@ -1,5 +1,5 @@
|
||||
package goext
|
||||
|
||||
const GoextVersion = "0.0.427"
|
||||
const GoextVersion = "0.0.431"
|
||||
|
||||
const GoextVersionTimestamp = "2024-04-07T15:10:21+0200"
|
||||
const GoextVersionTimestamp = "2024-04-10T15:29:58+0200"
|
||||
|
@@ -63,3 +63,51 @@ func PatchRemJson[JV string | []byte](rawjson JV, key string) (JV, error) {
|
||||
|
||||
return JV(newjson), nil
|
||||
}
|
||||
|
||||
func MarshalJsonOrPanic(v any) string {
|
||||
bin, err := json.Marshal(v)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return string(bin)
|
||||
}
|
||||
|
||||
func MarshalJsonOrDefault(v any, def string) string {
|
||||
bin, err := json.Marshal(v)
|
||||
if err != nil {
|
||||
return def
|
||||
}
|
||||
return string(bin)
|
||||
}
|
||||
|
||||
func MarshalJsonOrNil(v any) *string {
|
||||
bin, err := json.Marshal(v)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return Ptr(string(bin))
|
||||
}
|
||||
|
||||
func MarshalJsonIndentOrPanic(v any, prefix, indent string) string {
|
||||
bin, err := json.MarshalIndent(v, prefix, indent)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return string(bin)
|
||||
}
|
||||
|
||||
func MarshalJsonIndentOrDefault(v any, prefix, indent string, def string) string {
|
||||
bin, err := json.MarshalIndent(v, prefix, indent)
|
||||
if err != nil {
|
||||
return def
|
||||
}
|
||||
return string(bin)
|
||||
}
|
||||
|
||||
func MarshalJsonIndentOrNil(v any, prefix, indent string) *string {
|
||||
bin, err := json.MarshalIndent(v, prefix, indent)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return Ptr(string(bin))
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ package reflectext
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
@@ -9,12 +10,21 @@ type ConvertStructToMapOpt struct {
|
||||
KeepJsonMarshalTypes bool
|
||||
}
|
||||
|
||||
func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) any {
|
||||
func ConvertStructToMap(v any, opts ...ConvertStructToMapOpt) map[string]any {
|
||||
opt := ConvertStructToMapOpt{}
|
||||
if len(opts) > 0 {
|
||||
opt = opts[0]
|
||||
}
|
||||
return reflectToMap(reflect.ValueOf(v), opt)
|
||||
|
||||
res := reflectToMap(reflect.ValueOf(v), opt)
|
||||
|
||||
if v, ok := res.(map[string]any); ok {
|
||||
return v
|
||||
} else if langext.IsNil(res) {
|
||||
return nil
|
||||
} else {
|
||||
panic("not an object")
|
||||
}
|
||||
}
|
||||
|
||||
func reflectToMap(fv reflect.Value, opt ConvertStructToMapOpt) any {
|
||||
|
42
reflectext/convertToMap_test.go
Normal file
42
reflectext/convertToMap_test.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package reflectext
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestConvertStructToMap(t *testing.T) {
|
||||
|
||||
type tst struct {
|
||||
FieldA int
|
||||
FieldB string
|
||||
FieldC time.Time
|
||||
FieldD []float64
|
||||
FieldE1 *int
|
||||
FieldE2 **int
|
||||
FieldE3 *int
|
||||
FieldE4 **int
|
||||
FieldE5 *int
|
||||
FieldE6 **int
|
||||
}
|
||||
|
||||
value := tst{
|
||||
FieldA: 123,
|
||||
FieldB: "hello",
|
||||
FieldC: time.Date(2020, 05, 12, 8, 30, 0, 0, time.UTC),
|
||||
FieldD: []float64{1, 2, 3, 4, 5, 6, 7},
|
||||
FieldE1: nil,
|
||||
FieldE2: nil,
|
||||
FieldE3: langext.Ptr(12),
|
||||
FieldE4: langext.DblPtr(12),
|
||||
FieldE5: nil,
|
||||
FieldE6: langext.DblPtrNil[int](),
|
||||
}
|
||||
|
||||
valueOut := ConvertStructToMap(value, ConvertStructToMapOpt{KeepJsonMarshalTypes: true})
|
||||
|
||||
fmt.Printf("%+v\n", valueOut)
|
||||
|
||||
}
|
@@ -47,9 +47,3 @@ func TestGetMapField(t *testing.T) {
|
||||
tst.AssertEqual(t, fmt.Sprint(GetMapField[PseudoInt](maany2, "Test")), "12 true")
|
||||
tst.AssertEqual(t, fmt.Sprint(GetMapField[PseudoInt](maany2, "Test2")), "0 false")
|
||||
}
|
||||
|
||||
func main2() {
|
||||
}
|
||||
|
||||
func main() {
|
||||
}
|
||||
|
Reference in New Issue
Block a user