func ParseSize()

in internal/configutil/size.go [63:105]


func ParseSize(s string) (Size, error) {
	orig := s
	var mul Size = 1
	if strings.HasPrefix(s, "-") {
		mul = -1
		s = s[1:]
	}

	sep := -1
	for i, c := range s {
		if sep == -1 {
			if c < '0' || c > '9' {
				sep = i
				break
			}
		}
	}
	if sep == -1 {
		return 0, fmt.Errorf("missing unit in size %s (allowed units: B, KB, MB, GB)", orig)
	}

	n, err := strconv.ParseInt(s[:sep], 10, 32)
	if err != nil {
		return 0, fmt.Errorf("invalid size %s", orig)
	}
	switch strings.ToLower(s[sep:]) {
	case "gb":
		mul = GByte
	case "mb":
		mul = MByte
	case "kb":
		mul = KByte
	case "b":
	default:
		for _, c := range s[sep:] {
			if unicode.IsSpace(c) {
				return 0, fmt.Errorf("invalid character %q in size %s", c, orig)
			}
		}
		return 0, fmt.Errorf("invalid unit in size %s (allowed units: B, KB, MB, GB)", orig)
	}
	return mul * Size(n), nil
}