Skip to content

Commit

Permalink
fixup: remove enum in favor of struct
Browse files Browse the repository at this point in the history
  • Loading branch information
alexzielenski committed Apr 7, 2022
1 parent b897b2f commit 78be66e
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 47 deletions.
2 changes: 1 addition & 1 deletion pkg/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ func convertToDisableDeepCopyByGVK(disableDeepCopyByObject DisableDeepCopyByObje

type TransformFuncByObject map[client.Object]toolscache.TransformFunc

func convertToTransformByKindAndGVK(t TransformFuncByObject, scheme *runtime.Scheme) (internal.TransformFuncByObject, error) {
func convertToTransformByKindAndGVK(t TransformFuncByObject, scheme *runtime.Scheme) (*internal.TransformFuncByObject, error) {
result := internal.NewTransformFuncByObject()
for obj, transformation := range t {
if err := result.Set(obj, scheme, transformation); err != nil {
Expand Down
8 changes: 4 additions & 4 deletions pkg/cache/internal/deleg_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ func NewInformersMap(config *rest.Config,
namespace string,
selectors SelectorsByGVK,
disableDeepCopy DisableDeepCopyByGVK,
transformers TransformFuncByObject,
transformers *TransformFuncByObject,
) *InformersMap {
return &InformersMap{
structured: newStructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.Get(runtimeObjectKindStructured)),
unstructured: newUnstructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.Get(runtimeObjectKindUnstructured)),
metadata: newMetadataInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.Get(runtimeObjectKindMetadata)),
structured: newStructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.structured),
unstructured: newUnstructuredInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.unstructured),
metadata: newMetadataInformersMap(config, scheme, mapper, resync, namespace, selectors, disableDeepCopy, transformers.metadata),

Scheme: scheme,
}
Expand Down
1 change: 1 addition & 0 deletions pkg/cache/internal/informers_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ func newSpecificInformersMap(config *rest.Config,
namespace: namespace,
selectors: selectors.forGVK,
disableDeepCopy: disableDeepCopy,
transformers: transformers,
}
return ip
}
Expand Down
59 changes: 18 additions & 41 deletions pkg/cache/internal/transformers.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,57 +9,34 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
)

type runtimeObjectKind int

const (
// prefixed names since there are packages with these names that conflict
runtimeObjectKindStructured runtimeObjectKind = iota
runtimeObjectKindUnstructured
runtimeObjectKindMetadata
)

func runtimeObjectKindForObject(obj runtime.Object) runtimeObjectKind {
switch obj.(type) {
case *unstructured.Unstructured:
return runtimeObjectKindUnstructured
case *unstructured.UnstructuredList:
return runtimeObjectKindUnstructured
case *metav1.PartialObjectMetadata:
return runtimeObjectKindMetadata
case *metav1.PartialObjectMetadataList:
return runtimeObjectKindMetadata
default:
return runtimeObjectKindStructured
}
type TransformFuncByObject struct {
structured TransformFuncByGVK
unstructured TransformFuncByGVK
metadata TransformFuncByGVK
}

type TransformFuncByObject map[runtimeObjectKind]map[schema.GroupVersionKind]cache.TransformFunc
type TransformFuncByGVK map[schema.GroupVersionKind]cache.TransformFunc

func NewTransformFuncByObject() TransformFuncByObject {
return TransformFuncByObject{}
func NewTransformFuncByObject() *TransformFuncByObject {
return &TransformFuncByObject{
structured: TransformFuncByGVK{},
unstructured: TransformFuncByGVK{},
metadata: TransformFuncByGVK{},
}
}

func (t TransformFuncByObject) Set(obj runtime.Object, scheme *runtime.Scheme, transformer cache.TransformFunc) error {
kind := runtimeObjectKindForObject(obj)
existing, ok := t[kind]
if !ok {
existing = TransformFuncByGVK{}
t[kind] = existing
}

gvk, err := apiutil.GVKForObject(obj, nil)
gvk, err := apiutil.GVKForObject(obj, scheme)
if err != nil {
return err
}

existing[gvk] = transformer
return nil
}

func (t TransformFuncByObject) Get(kind runtimeObjectKind) TransformFuncByGVK {
if val, ok := t[kind]; ok {
return val
switch obj.(type) {
case *unstructured.Unstructured, *unstructured.UnstructuredList:
t.unstructured[gvk] = transformer
case *metav1.PartialObjectMetadata, *metav1.PartialObjectMetadataList:
t.metadata[gvk] = transformer
default:
t.structured[gvk] = transformer
}
return nil
}
Expand Down
6 changes: 5 additions & 1 deletion pkg/controller/controllertest/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ func (f *FakeInformer) Run(<-chan struct{}) {
f.RunCount++
}

// Add fakes an Add event for obj.
func (f *FakeInformer) Add(obj metav1.Object) {
for _, h := range f.handlers {
h.OnAdd(obj)
// Add fakes an Add event for obj.
}
}

Expand Down Expand Up @@ -111,3 +111,7 @@ func (f *FakeInformer) LastSyncResourceVersion() string {
func (f *FakeInformer) SetWatchErrorHandler(cache.WatchErrorHandler) error {
return nil
}

func (f *FakeInformer) SetTransform(t cache.TransformFunc) error {
return nil
}

0 comments on commit 78be66e

Please sign in to comment.