updated dependencies and go

This commit is contained in:
2026-04-21 11:06:01 +02:00
parent f62e7499ec
commit 84b87d61f2
91 changed files with 551 additions and 637 deletions
+22 -22
View File
@@ -5,23 +5,23 @@ import (
)
var reflectBasicTypes = map[reflect.Kind]reflect.Type{
reflect.Bool: reflect.TypeOf(false),
reflect.Int: reflect.TypeOf(int(0)),
reflect.Int8: reflect.TypeOf(int8(0)),
reflect.Int16: reflect.TypeOf(int16(0)),
reflect.Int32: reflect.TypeOf(int32(0)),
reflect.Int64: reflect.TypeOf(int64(0)),
reflect.Uint: reflect.TypeOf(uint(0)),
reflect.Uint8: reflect.TypeOf(uint8(0)),
reflect.Uint16: reflect.TypeOf(uint16(0)),
reflect.Uint32: reflect.TypeOf(uint32(0)),
reflect.Uint64: reflect.TypeOf(uint64(0)),
reflect.Uintptr: reflect.TypeOf(uintptr(0)),
reflect.Float32: reflect.TypeOf(float32(0)),
reflect.Float64: reflect.TypeOf(float64(0)),
reflect.Complex64: reflect.TypeOf(complex64(0)),
reflect.Complex128: reflect.TypeOf(complex128(0)),
reflect.String: reflect.TypeOf(""),
reflect.Bool: reflect.TypeFor[bool](),
reflect.Int: reflect.TypeFor[int](),
reflect.Int8: reflect.TypeFor[int8](),
reflect.Int16: reflect.TypeFor[int16](),
reflect.Int32: reflect.TypeFor[int32](),
reflect.Int64: reflect.TypeFor[int64](),
reflect.Uint: reflect.TypeFor[uint](),
reflect.Uint8: reflect.TypeFor[uint8](),
reflect.Uint16: reflect.TypeFor[uint16](),
reflect.Uint32: reflect.TypeFor[uint32](),
reflect.Uint64: reflect.TypeFor[uint64](),
reflect.Uintptr: reflect.TypeFor[uintptr](),
reflect.Float32: reflect.TypeFor[float32](),
reflect.Float64: reflect.TypeFor[float64](),
reflect.Complex64: reflect.TypeFor[complex64](),
reflect.Complex128: reflect.TypeFor[complex128](),
reflect.String: reflect.TypeFor[string](),
}
// Underlying returns the underlying type of t (without type alias)
@@ -48,17 +48,17 @@ func Underlying(t reflect.Type) (ret reflect.Type) {
nOut := t.NumOut()
in := make([]reflect.Type, nIn)
out := make([]reflect.Type, nOut)
for i := 0; i < nIn; i++ {
for i := range nIn {
in[i] = t.In(i)
}
for i := 0; i < nOut; i++ {
for i := range nOut {
out[i] = t.Out(i)
}
ret = reflect.FuncOf(in, out, t.IsVariadic())
case reflect.Interface:
// not supported
case reflect.Ptr:
ret = reflect.PtrTo(t.Elem())
case reflect.Pointer:
ret = reflect.PointerTo(t.Elem())
case reflect.Slice:
ret = reflect.SliceOf(t.Elem())
case reflect.Struct:
@@ -72,7 +72,7 @@ func Underlying(t reflect.Type) (ret reflect.Type) {
}()
n := t.NumField()
fields := make([]reflect.StructField, n)
for i := 0; i < n; i++ {
for i := range n {
fields[i] = t.Field(i)
}
ret = reflect.StructOf(fields)
+3 -3
View File
@@ -36,7 +36,7 @@ func reflectToMap(fv reflect.Value, depth int, opt ConvertStructToMapOpt) any {
return fv.Interface()
}
if fv.Kind() == reflect.Ptr {
if fv.Kind() == reflect.Pointer {
if fv.IsNil() {
return nil
@@ -57,7 +57,7 @@ func reflectToMap(fv reflect.Value, depth int, opt ConvertStructToMapOpt) any {
arrlen := fv.Len()
arr := make([]any, arrlen)
for i := 0; i < arrlen; i++ {
for i := range arrlen {
arr[i] = reflectToMap(fv.Index(i), depth+1, opt)
}
return arr
@@ -68,7 +68,7 @@ func reflectToMap(fv reflect.Value, depth int, opt ConvertStructToMapOpt) any {
arrlen := fv.Len()
arr := make([]any, arrlen)
for i := 0; i < arrlen; i++ {
for i := range arrlen {
arr[i] = reflectToMap(fv.Index(i), depth+1, opt)
}
return arr
+1 -1
View File
@@ -29,7 +29,7 @@ func TestConvertStructToMap(t *testing.T) {
FieldD: []float64{1, 2, 3, 4, 5, 6, 7},
FieldE1: nil,
FieldE2: nil,
FieldE3: langext.Ptr(12),
FieldE3: new(12),
FieldE4: langext.DblPtr(12),
FieldE5: nil,
FieldE6: langext.DblPtrNil[int](),
+4 -4
View File
@@ -39,7 +39,7 @@ func GetMapField[TData any, TKey comparable](mapval any, key TKey) (TData, bool)
rval := reflect.ValueOf(mapval)
for rval.Kind() == reflect.Ptr && !rval.IsNil() {
for rval.Kind() == reflect.Pointer && !rval.IsNil() {
rval = rval.Elem()
}
@@ -58,7 +58,7 @@ func GetMapField[TData any, TKey comparable](mapval any, key TKey) (TData, bool)
return *new(TData), false // key does not exist in mapval
}
destType := reflect.TypeOf(new(TData)).Elem()
destType := reflect.TypeFor[TData]()
if eval.Type() == destType {
return eval.Interface().(TData), true
@@ -68,11 +68,11 @@ func GetMapField[TData any, TKey comparable](mapval any, key TKey) (TData, bool)
return eval.Convert(destType).Interface().(TData), true
}
if (eval.Kind() == reflect.Ptr || eval.Kind() == reflect.Interface) && eval.IsNil() && destType.Kind() == reflect.Ptr {
if (eval.Kind() == reflect.Pointer || eval.Kind() == reflect.Interface) && eval.IsNil() && destType.Kind() == reflect.Pointer {
return *new(TData), false // special case: mapval[key] is nil
}
for (eval.Kind() == reflect.Ptr || eval.Kind() == reflect.Interface) && !eval.IsNil() {
for (eval.Kind() == reflect.Pointer || eval.Kind() == reflect.Interface) && !eval.IsNil() {
eval = eval.Elem()
if eval.Type() == destType {
+13 -13
View File
@@ -3,8 +3,8 @@ package reflectext
import (
"errors"
"fmt"
"go.mongodb.org/mongo-driver/bson/primitive"
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
"go.mongodb.org/mongo-driver/bson/primitive"
"reflect"
"strconv"
"strings"
@@ -13,24 +13,24 @@ import (
var primitiveSerializer = map[reflect.Type]genSerializer{
reflect.TypeOf(""): newGenSerializer(serStringToString, serStringToString),
reflect.TypeFor[string](): newGenSerializer(serStringToString, serStringToString),
reflect.TypeOf(int(0)): newGenSerializer(serIntNumToString[int], serStringToSIntNum[int]),
reflect.TypeOf(int32(0)): newGenSerializer(serIntNumToString[int32], serStringToSIntNum[int32]),
reflect.TypeOf(int64(0)): newGenSerializer(serIntNumToString[int64], serStringToSIntNum[int64]),
reflect.TypeFor[int](): newGenSerializer(serIntNumToString[int], serStringToSIntNum[int]),
reflect.TypeFor[int32](): newGenSerializer(serIntNumToString[int32], serStringToSIntNum[int32]),
reflect.TypeFor[int64](): newGenSerializer(serIntNumToString[int64], serStringToSIntNum[int64]),
reflect.TypeOf(uint(0)): newGenSerializer(serIntNumToString[uint], serStringToUIntNum[uint]),
reflect.TypeOf(uint32(0)): newGenSerializer(serIntNumToString[uint32], serStringToUIntNum[uint32]),
reflect.TypeOf(uint64(0)): newGenSerializer(serIntNumToString[uint64], serStringToUIntNum[uint64]),
reflect.TypeFor[uint](): newGenSerializer(serIntNumToString[uint], serStringToUIntNum[uint]),
reflect.TypeFor[uint32](): newGenSerializer(serIntNumToString[uint32], serStringToUIntNum[uint32]),
reflect.TypeFor[uint64](): newGenSerializer(serIntNumToString[uint64], serStringToUIntNum[uint64]),
reflect.TypeOf(float32(0)): newGenSerializer(serFloatNumToString[float32], serStringToFloatNum[float32]),
reflect.TypeOf(float64(0)): newGenSerializer(serFloatNumToString[float64], serStringToFloatNum[float64]),
reflect.TypeFor[float32](): newGenSerializer(serFloatNumToString[float32], serStringToFloatNum[float32]),
reflect.TypeFor[float64](): newGenSerializer(serFloatNumToString[float64], serStringToFloatNum[float64]),
reflect.TypeOf(true): newGenSerializer(serBoolToString, serStringToBool),
reflect.TypeFor[bool](): newGenSerializer(serBoolToString, serStringToBool),
reflect.TypeOf(primitive.ObjectID{}): newGenSerializer(serObjectIDToString, serStringToObjectID),
reflect.TypeFor[primitive.ObjectID](): newGenSerializer(serObjectIDToString, serStringToObjectID),
reflect.TypeOf(time.Time{}): newGenSerializer(serTimeToString, serStringToTime),
reflect.TypeFor[time.Time](): newGenSerializer(serTimeToString, serStringToTime),
}
type genSerializer struct {
+4 -4
View File
@@ -20,11 +20,11 @@ func (pss PrimitiveStringSerializer) ValueToString(v any) (string, error) {
inType := reflect.TypeOf(v)
if inType.Kind() == reflect.Ptr && langext.IsNil(v) {
if inType.Kind() == reflect.Pointer && langext.IsNil(v) {
return "", nil
}
if inType.Kind() == reflect.Ptr {
if inType.Kind() == reflect.Pointer {
rval1 := reflect.ValueOf(v)
rval2 := rval1.Elem()
rval3 := rval2.Interface()
@@ -46,7 +46,7 @@ func (pss PrimitiveStringSerializer) ValueToString(v any) (string, error) {
func (pss PrimitiveStringSerializer) ValueFromString(str string, outType reflect.Type) (any, error) {
if outType.Kind() == reflect.Ptr && str == "" {
if outType.Kind() == reflect.Pointer && str == "" {
return reflect.Zero(outType).Interface(), nil // = nil.(outType), nil
}
@@ -54,7 +54,7 @@ func (pss PrimitiveStringSerializer) ValueFromString(str string, outType reflect
return reflect.Zero(outType).Interface(), nil // = <default>(outType), nil
}
if outType.Kind() == reflect.Ptr {
if outType.Kind() == reflect.Pointer {
innerValue, err := pss.ValueFromString(str, outType.Elem())
if err != nil {
+2 -3
View File
@@ -2,7 +2,6 @@ package reflectext
import (
"errors"
"git.blackforestbytes.com/BlackForestBytes/goext/langext"
"reflect"
"strconv"
"strings"
@@ -29,7 +28,7 @@ type AccessStructOpt struct {
}
func AccessJSONStruct[TResult any](v any, path string) (TResult, error) {
return AccessStructByStringPath[TResult](v, path, AccessStructOpt{UsedTagForKeys: langext.Ptr("json")})
return AccessStructByStringPath[TResult](v, path, AccessStructOpt{UsedTagForKeys: new("json")})
}
func AccessStruct[TResult any](v any, path string) (TResult, error) {
@@ -84,7 +83,7 @@ func accessStructByPath(val reflect.Value, path []string, opt AccessStructOpt) (
currPath := path[0]
if val.Kind() == reflect.Ptr {
if val.Kind() == reflect.Pointer {
if val.IsNil() {
if opt.ReturnNilOnNilPtrFields {
return nil, nil