safing-portmaster/profile/icon.go

52 lines
854 B
Go

package profile
import (
"strings"
"golang.org/x/exp/slices"
)
// Icon describes an icon.
type Icon struct {
Type IconType
Value string
}
// IconType describes the type of an Icon.
type IconType string
// Supported icon types.
const (
IconTypeFile IconType = "path"
IconTypeDatabase IconType = "database"
IconTypeBlob IconType = "blob"
)
func (t IconType) sortOrder() int {
switch t {
case IconTypeFile:
return 1
case IconTypeDatabase:
return 2
case IconTypeBlob:
return 3
default:
return 100
}
}
func sortIcons(icons []Icon) {
slices.SortFunc[[]Icon, Icon](icons, func(a, b Icon) int {
aOrder := a.Type.sortOrder()
bOrder := b.Type.sortOrder()
switch {
case aOrder != bOrder:
return aOrder - bOrder
case a.Value != b.Value:
return strings.Compare(a.Value, b.Value)
default:
return 0
}
})
}