aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/stretchr/objx/accessors.go
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2022-09-05 14:27:54 +0200
committerGitHub <noreply@github.com>2022-09-05 12:27:54 +0000
commitb2f2446b46bf02821d90ebedadae2bf7ae0e880e (patch)
tree923cf42842918d6bebca1d6bbdc08abed54d274d /vendor/github.com/stretchr/objx/accessors.go
parente6654faff4bcca4be92e9a8596fd4b77f747c39e (diff)
go.mod, vendor: update (#3358)
* go.mod, vendor: remove unnecessary dependencies Commands: 1. go mod tidy 2. go mod vendor * go.mod, vendor: update cloud.google.com/go Commands: 1. go get -u cloud.google.com/go 2. go mod tidy 3. go mod vendor * go.mod, vendor: update cloud.google.com/* Commands: 1. go get -u cloud.google.com/storage cloud.google.com/logging 2. go mod tidy 3. go mod vendor * go.mod, .golangci.yml, vendor: update *lint* Commands: 1. go get -u golang.org/x/tools github.com/golangci/golangci-lint@v1.47.0 2. go mod tidy 3. go mod vendor 4. edit .golangci.yml to suppress new errors (resolved in the same PR later) * all: fix lint errors hash.go: copy() recommended by gosimple parse.go: ent is never nil verifier.go: signal.Notify() with unbuffered channel is bad. Have no idea why. * .golangci.yml: adjust godot rules check-all is deprecated, but still work if you're hesitating too - I'll remove this commit
Diffstat (limited to 'vendor/github.com/stretchr/objx/accessors.go')
-rw-r--r--vendor/github.com/stretchr/objx/accessors.go36
1 files changed, 27 insertions, 9 deletions
diff --git a/vendor/github.com/stretchr/objx/accessors.go b/vendor/github.com/stretchr/objx/accessors.go
index 80ad16740..4c6045588 100644
--- a/vendor/github.com/stretchr/objx/accessors.go
+++ b/vendor/github.com/stretchr/objx/accessors.go
@@ -116,9 +116,15 @@ func getKey(s string) (string, string) {
func access(current interface{}, selector string, value interface{}, isSet bool) interface{} {
thisSel, nextSel := getKey(selector)
- index := -1
- if strings.Contains(thisSel, "[") {
+ indexes := []int{}
+ for strings.Contains(thisSel, "[") {
+ prevSel := thisSel
+ index := -1
index, thisSel = getIndex(thisSel)
+ indexes = append(indexes, index)
+ if prevSel == thisSel {
+ break
+ }
}
if curMap, ok := current.(Map); ok {
@@ -134,7 +140,11 @@ func access(current interface{}, selector string, value interface{}, isSet bool)
}
_, ok := curMSI[thisSel].(map[string]interface{})
- if (curMSI[thisSel] == nil || !ok) && index == -1 && isSet {
+ if !ok {
+ _, ok = curMSI[thisSel].(Map)
+ }
+
+ if (curMSI[thisSel] == nil || !ok) && len(indexes) == 0 && isSet {
curMSI[thisSel] = map[string]interface{}{}
}
@@ -144,15 +154,23 @@ func access(current interface{}, selector string, value interface{}, isSet bool)
}
// do we need to access the item of an array?
- if index > -1 {
- if array, ok := interSlice(current); ok {
- if index < len(array) {
- current = array[index]
- } else {
- current = nil
+ if len(indexes) > 0 {
+ num := len(indexes)
+ for num > 0 {
+ num--
+ index := indexes[num]
+ indexes = indexes[:num]
+ if array, ok := interSlice(current); ok {
+ if index < len(array) {
+ current = array[index]
+ } else {
+ current = nil
+ break
+ }
}
}
}
+
if nextSel != "" {
current = access(current, nextSel, value, isSet)
}