-
Notifications
You must be signed in to change notification settings - Fork 2
/
types.go
71 lines (52 loc) · 1.7 KB
/
types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package machinery
import (
"fmt"
"strings"
"k8s.io/apimachinery/pkg/runtime/schema"
k8stypes "k8s.io/apimachinery/pkg/types"
)
const kindNameLocatorSeparator = ':'
type Object interface {
schema.ObjectKind
GetNamespace() string
GetName() string
GetLocator() string
}
func LocatorFromObject(obj Object) string {
name := strings.TrimPrefix(namespacedName(obj.GetNamespace(), obj.GetName()), string(k8stypes.Separator))
return fmt.Sprintf("%s%s%s", strings.ToLower(obj.GroupVersionKind().GroupKind().String()), string(kindNameLocatorSeparator), name)
}
func AsObject[T Object](t T, _ int) Object {
return t
}
func namespacedName(namespace, name string) string {
return k8stypes.NamespacedName{Namespace: namespace, Name: name}.String()
}
// Targetable is an interface that represents an object that can be targeted by policies.
type Targetable interface {
Object
SetPolicies([]Policy)
Policies() []Policy
}
func MapTargetableToLocatorFunc(t Targetable, _ int) string {
return t.GetLocator()
}
// Policy targets objects and can be merged with another Policy based on a given MergeStrategy.
type Policy interface {
Object
GetTargetRefs() []PolicyTargetReference
GetMergeStrategy() MergeStrategy
Merge(Policy) Policy
}
// PolicyTargetReference is a generic interface for all kinds of Gateway API policy target references.
// It implements the Object interface for the referent.
type PolicyTargetReference interface {
Object
}
// MergeStrategy is a function that merges two Policy objects into a new Policy object.
type MergeStrategy func(Policy, Policy) Policy
var DefaultMergeStrategy = NoMergeStrategy
func NoMergeStrategy(_, target Policy) Policy {
return target
}
var _ MergeStrategy = NoMergeStrategy