38 lines
838 B
Go
38 lines
838 B
Go
package tygoja
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func isProbablyIotaType(groupType string) bool {
|
|
groupType = strings.Trim(groupType, "()")
|
|
return groupType == "iota" || strings.HasPrefix(groupType, "iota +") || strings.HasSuffix(groupType, "+ iota")
|
|
}
|
|
|
|
func basicIotaOffsetValueParse(groupType string) (int, error) {
|
|
if !isProbablyIotaType(groupType) {
|
|
panic("can't parse non-iota type")
|
|
}
|
|
|
|
groupType = strings.Trim(groupType, "()")
|
|
if groupType == "iota" {
|
|
return 0, nil
|
|
}
|
|
parts := strings.Split(groupType, " + ")
|
|
|
|
var numPart string
|
|
if parts[0] == "iota" {
|
|
numPart = parts[1]
|
|
} else {
|
|
numPart = parts[0]
|
|
}
|
|
|
|
addValue, err := strconv.ParseInt(numPart, 10, 64)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("Failed to guesstimate initial iota value for \"%s\": %w", groupType, err)
|
|
}
|
|
|
|
return int(addValue), nil
|
|
}
|