in wstl1/mapping_engine/util/jsonutil/jsonutil.go [376:414]
func (w DefaultAccessor) setFieldSegmented(src JSONToken, segments []string, dest *JSONToken, overwrite bool, matchNesting bool) error {
if len(segments) == 0 {
if overwrite {
*dest = src
return nil
}
return Merge(src, dest, true /* failOnOverwrite */, false /* overwriteArrays */)
}
seg := segments[0]
if *dest == nil {
if IsIndex(seg) {
*dest = make(JSONArr, 0, 1)
} else {
*dest = make(JSONContainer)
}
}
switch o := (*dest).(type) {
case JSONArr:
return setArrField(w, src, segments, dest, overwrite, matchNesting)
case JSONContainer:
if seg == "" || seg == "." {
var obj JSONToken = o
return w.setFieldSegmented(src, segments[1:], &obj, overwrite, matchNesting)
}
item, ok := o[seg]
if !ok {
n := JSONToken(nil)
item = &n
o[seg] = item
}
return w.setFieldSegmented(src, segments[1:], item, overwrite, matchNesting)
case JSONNum, JSONStr, JSONBool:
return fmt.Errorf("attempt to key into primitive with key %s", seg)
}
return fmt.Errorf("this is an internal bug: JSON contained unknown data type %T at %s", *dest, seg)
}