in wstl1/mapping_engine/util/jsonutil/jsonutil.go [99:133]
func SegmentPath(path string) ([]string, error) {
segs := make([]string, 0, 1)
sb := strings.Builder{}
var escaped, prevEscaped bool
for i, c := range path {
escaped = i > 0 && path[i-1] == '\\' && !prevEscaped
delim := c == '.' && !escaped
// Validation
if !unicode.IsLetter(c) && !unicode.IsDigit(c) && !strings.Contains(`-*[]._\' `, string(c)) && !escaped {
return nil, fmt.Errorf("invalid character %q", string(c))
}
if i > 0 && c == '.' && path[i-1] == '.' && !prevEscaped {
return nil, fmt.Errorf("consecutive dots in path %s", path)
}
if (!delim && c != '\\') || escaped {
sb.WriteRune(c)
}
if (delim || (i < len(path)-1 && path[i+1] == '[')) && sb.Len() > 0 {
segs = append(segs, sb.String())
sb.Reset()
}
prevEscaped = escaped
}
if sb.Len() > 0 {
segs = append(segs, sb.String())
}
return segs, nil
}