cozystack/pkg/registry/sorting/sort.go
Aleksei Sviridkin da56c88aa7
[registry] Remove unused ObjectMetaWrapper
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
2025-12-26 13:06:35 +03:00

47 lines
1.1 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Package sorting provides generic sorting utilities for registry resources.
package sorting
import (
"slices"
"strings"
)
// NameGetter is an interface for objects that have a Name.
type NameGetter interface {
GetName() string
}
// NamespaceGetter is an interface for objects that have both Name and Namespace.
type NamespaceGetter interface {
NameGetter
GetNamespace() string
}
// ByName sorts a slice of objects by their Name in alphabetical order.
// Use this for cluster-scoped resources.
func ByName[T any, PT interface {
*T
NameGetter
}](items []T) {
slices.SortFunc(items, func(a, b T) int {
pa, pb := PT(&a), PT(&b)
return strings.Compare(pa.GetName(), pb.GetName())
})
}
// ByNamespacedName sorts a slice of objects by Namespace/Name in alphabetical order.
// Use this for namespace-scoped resources.
func ByNamespacedName[T any, PT interface {
*T
NamespaceGetter
}](items []T) {
slices.SortFunc(items, func(a, b T) int {
pa, pb := PT(&a), PT(&b)
if res := strings.Compare(pa.GetNamespace(), pb.GetNamespace()); res != 0 {
return res
}
return strings.Compare(pa.GetName(), pb.GetName())
})
}