@@ -7,55 +7,60 @@ import (
7
7
8
8
const qualitySign = ";q="
9
9
const defaultQuality = 1000
10
- const maxQualityDigits = 3
10
+ const maxQualityDecimals = 3
11
11
12
12
type acceptItem struct {
13
13
value string
14
14
quality int
15
15
}
16
16
17
17
func parseAcceptItem (input string ) acceptItem {
18
- indexQSign := strings . Index ( input , qualitySign )
19
- if indexQSign < 0 {
20
- return acceptItem { input , defaultQuality }
18
+ value := input
19
+ if semiColonIndex := strings . IndexByte ( value , ';' ); semiColonIndex >= 0 {
20
+ value = value [: semiColonIndex ]
21
21
}
22
22
23
- value := input [:indexQSign ]
24
- strQuality := input [indexQSign + len (qualitySign ):]
25
- if semiColonIndex := strings .IndexByte (strQuality , ';' ); semiColonIndex >= 0 {
26
- strQuality = strQuality [:semiColonIndex ]
23
+ rest := input [len (value ):]
24
+ qSignIndex := strings .Index (rest , qualitySign )
25
+ if qSignIndex < 0 {
26
+ return acceptItem {value , defaultQuality }
27
+ }
28
+
29
+ rest = rest [qSignIndex + len (qualitySign ):]
30
+ if semiColonIndex := strings .IndexByte (rest , ';' ); semiColonIndex >= 0 {
31
+ rest = rest [:semiColonIndex ]
27
32
}
28
- strQualityLen := len (strQuality )
33
+ qLen := len (rest )
29
34
30
- if strQualityLen == 0 {
35
+ if qLen == 0 {
31
36
return acceptItem {value , defaultQuality }
32
37
}
33
- if strQualityLen > 1 && strQuality [1 ] != '.' {
38
+ if qLen > 1 && rest [1 ] != '.' {
34
39
return acceptItem {value , defaultQuality }
35
40
}
36
41
37
42
// "q=1" or q is an invalid value
38
- if strQuality [0 ] != '0' {
43
+ if rest [0 ] != '0' {
39
44
return acceptItem {value , defaultQuality }
40
45
}
41
46
42
47
// "q=0."
43
- if strQualityLen <= 2 {
48
+ if qLen <= 2 {
44
49
return acceptItem {value , 0 }
45
50
}
46
51
47
- strRest := strQuality [2 :]
48
- strRestLen := len (strRest )
49
- if strRestLen > maxQualityDigits {
50
- strRestLen = maxQualityDigits
51
- strRest = strRest [: strRestLen ]
52
+ rest = rest [2 :]
53
+ qDecimalLen := len (rest )
54
+ if qDecimalLen > maxQualityDecimals {
55
+ qDecimalLen = maxQualityDecimals
56
+ rest = rest [: qDecimalLen ]
52
57
}
53
58
54
- quality , err := strconv .Atoi (strRest )
59
+ quality , err := strconv .Atoi (rest )
55
60
if err != nil {
56
61
quality = defaultQuality
57
62
} else {
58
- missingDigits := maxQualityDigits - strRestLen
63
+ missingDigits := maxQualityDecimals - qDecimalLen
59
64
for i := 0 ; i < missingDigits ; i ++ {
60
65
quality *= 10
61
66
}
0 commit comments