in nimo-shake/common/operator.go [23:67]
func FindFirstErrorIndexAndMessage(error string) (int, string, bool) {
subIndex := "index["
subMsg := "msg["
subDup := "dup["
index := strings.Index(error, subIndex)
if index == -1 {
return index, "", false
}
indexVal := 0
for i := index + len(subIndex); i < len(error) && error[i] != ']'; i++ {
// fmt.Printf("%c %d\n", rune(error[i]), int(error[i] - '0'))
indexVal = indexVal * 10 + int(error[i] - '0')
}
index = strings.Index(error, subMsg)
if index == -1 {
return indexVal, "", false
}
i := index + len(subMsg)
stack := 0
for ; i < len(error); i++ {
if error[i] == ']' {
if stack == 0 {
break
} else {
stack -= 1
}
} else if error[i] == '[' {
stack += 1
}
}
msg := error[index + len(subMsg): i]
index = strings.Index(error, subDup)
if index == -1 {
return indexVal, msg, false
}
i = index + len(subMsg)
for ; i < len(error) && error[i] != ']'; i++ {}
dupVal := error[index + len(subMsg):i]
return indexVal, msg, dupVal == "true"
}