func()

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)
}