goyave.dev/goyave/v4@v4.4.11/util/httputil/sort.go (about) 1 package httputil 2 3 import "strings" 4 5 type byPriority []HeaderValue 6 7 func (s byPriority) Len() int { 8 return len(s) 9 } 10 func (s byPriority) Swap(i, j int) { 11 s[i], s[j] = s[j], s[i] 12 } 13 func (s byPriority) Less(i, j int) bool { 14 if s[j].Priority == s[i].Priority { 15 return specificity(s[j]) < specificity(s[i]) 16 } 17 18 return s[j].Priority < s[i].Priority 19 } 20 21 func specificity(value HeaderValue) int { 22 return strings.Count(value.Value, "-") + strings.Count(value.Value, "/") - strings.Count(value.Value, "*") 23 }