diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/internal/util.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/internal/util.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/internal/util.go b/vendor/github.com/uptrace/bun/internal/util.go index 641309725..66b92b3c5 100644 --- a/vendor/github.com/uptrace/bun/internal/util.go +++ b/vendor/github.com/uptrace/bun/internal/util.go @@ -55,3 +55,27 @@ func Unwrap(err error) error { } return u.Unwrap() } + +func FieldByIndexAlloc(v reflect.Value, index []int) reflect.Value { + if len(index) == 1 { + return v.Field(index[0]) + } + + for i, idx := range index { + if i > 0 { + v = indirectNil(v) + } + v = v.Field(idx) + } + return v +} + +func indirectNil(v reflect.Value) reflect.Value { + if v.Kind() == reflect.Ptr { + if v.IsNil() { + v.Set(reflect.New(v.Type().Elem())) + } + v = v.Elem() + } + return v +} |