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  }