summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-mangler/load.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/codeberg.org/gruf/go-mangler/load.go')
-rw-r--r--vendor/codeberg.org/gruf/go-mangler/load.go33
1 files changed, 20 insertions, 13 deletions
diff --git a/vendor/codeberg.org/gruf/go-mangler/load.go b/vendor/codeberg.org/gruf/go-mangler/load.go
index bc79d381e..ba2b9351b 100644
--- a/vendor/codeberg.org/gruf/go-mangler/load.go
+++ b/vendor/codeberg.org/gruf/go-mangler/load.go
@@ -8,6 +8,7 @@ import (
// function will be returned for given value interface{} and reflected type. Else panics.
func loadMangler(t reflect.Type) Mangler {
ctx := typecontext{rtype: t}
+ ctx.direct = true
// Load mangler fn
mng := load(ctx)
@@ -103,6 +104,9 @@ func loadReflectPtr(ctx typecontext) Mangler {
n++
}
+ // Set ptr type.
+ ctx.isptr = true
+
// Search for elemn type mangler.
if mng := load(ctx); mng != nil {
return deref_ptr_mangler(ctx, mng, n)
@@ -157,11 +161,13 @@ func loadReflectKnownSlice(ctx typecontext) Mangler {
// loadReflectSlice ...
func loadReflectSlice(ctx typecontext) Mangler {
- // Set nesting type.
- ctx.ntype = ctx.rtype
// Get nested element type.
- ctx.rtype = ctx.rtype.Elem()
+ elem := ctx.rtype.Elem()
+
+ // Set this as nested type.
+ ctx.set_nested(false)
+ ctx.rtype = elem
// Preferably look for known slice mangler func
if mng := loadReflectKnownSlice(ctx); mng != nil {
@@ -178,11 +184,14 @@ func loadReflectSlice(ctx typecontext) Mangler {
// loadReflectArray ...
func loadReflectArray(ctx typecontext) Mangler {
- // Set nesting type.
- ctx.ntype = ctx.rtype
// Get nested element type.
- ctx.rtype = ctx.rtype.Elem()
+ elem := ctx.rtype.Elem()
+
+ // Set this as a nested value type.
+ direct := ctx.rtype.Len() <= 1
+ ctx.set_nested(direct)
+ ctx.rtype = elem
// Use manglers for nested iteration.
if mng := load(ctx); mng != nil {
@@ -196,17 +205,15 @@ func loadReflectArray(ctx typecontext) Mangler {
func loadReflectStruct(ctx typecontext) Mangler {
var mngs []Mangler
- // Set nesting type.
- ctx.ntype = ctx.rtype
+ // Set this as a nested value type.
+ direct := ctx.rtype.NumField() <= 1
+ ctx.set_nested(direct)
// Gather manglers for all fields.
for i := 0; i < ctx.ntype.NumField(); i++ {
- // Field typectx.
- ctx := typecontext{
- ntype: ctx.ntype,
- rtype: ctx.ntype.Field(i).Type,
- }
+ // Update context with field at index.
+ ctx.rtype = ctx.ntype.Field(i).Type
// Load mangler.
mng := load(ctx)