/
size_range.go
50 lines (44 loc) · 1 KB
/
size_range.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package besticon
import (
"errors"
"strconv"
"strings"
)
// SizeRange represents the desired icon dimensions
type SizeRange struct {
Min int
Perfect int
Max int
}
var errBadSize = errors.New("besticon: bad size")
// ParseSizeRange parses a string like 60..100..200 into a SizeRange
func ParseSizeRange(s string) (*SizeRange, error) {
parts := strings.SplitN(s, "..", 3)
switch len(parts) {
case 1:
size, ok := parseSize(parts[0])
if !ok {
return nil, errBadSize
}
return &SizeRange{size, size, MaxIconSize}, nil
case 3:
n1, ok1 := parseSize(parts[0])
n2, ok2 := parseSize(parts[1])
n3, ok3 := parseSize(parts[2])
if !ok1 || !ok2 || !ok3 {
return nil, errBadSize
}
if !((n1 <= n2) && (n2 <= n3)) {
return nil, errBadSize
}
return &SizeRange{n1, n2, n3}, nil
}
return nil, errBadSize
}
func parseSize(s string) (int, bool) {
minSize, err := strconv.Atoi(s)
if err != nil || minSize < MinIconSize || minSize > MaxIconSize {
return -1, false
}
return minSize, true
}