From 02579cd971bfa7471e94236e33da0b753f83fe94 Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Thu, 20 Oct 2022 20:04:29 -0400 Subject: [PATCH] move generic stack into a common type package --- internal/capability/auditor.go | 7 ++-- internal/capability/types.go | 35 ------------------ internal/types/stack.go | 37 +++++++++++++++++++ .../types_test.go => types/stack_test.go} | 2 +- 4 files changed, 42 insertions(+), 39 deletions(-) create mode 100644 internal/types/stack.go rename internal/{capability/types_test.go => types/stack_test.go} (97%) diff --git a/internal/capability/auditor.go b/internal/capability/auditor.go index 71f21b7..364dc1f 100644 --- a/internal/capability/auditor.go +++ b/internal/capability/auditor.go @@ -11,6 +11,7 @@ import ( "github.com/opdev/opcap/internal/logger" "github.com/opdev/opcap/internal/operator" + "github.com/opdev/opcap/internal/types" "k8s.io/apimachinery/pkg/util/yaml" ) @@ -173,14 +174,14 @@ func (ca *CapAuditor) buildWorkQueueByCatalog(ctx context.Context, c operator.Cl return nil } -func (ca *CapAuditor) cleanup(ctx context.Context, stack *Stack[auditCleanupFn]) { +func (ca *CapAuditor) cleanup(ctx context.Context, stack *types.Stack[auditCleanupFn]) { if stack == nil { return } for !stack.Empty() { logger.Debugw("cleaning up...") cleaner, err := stack.Pop() - if errors.Is(err, StackEmptyError) { + if errors.Is(err, types.StackEmptyError) { break } if err := cleaner(ctx); err != nil { @@ -192,7 +193,7 @@ func (ca *CapAuditor) cleanup(ctx context.Context, stack *Stack[auditCleanupFn]) // RunAudits executes all selected functions in order for a given audit at a time func (ca *CapAuditor) RunAudits(ctx context.Context) error { - cleanups := Stack[auditCleanupFn]{} + cleanups := types.Stack[auditCleanupFn]{} defer ca.cleanup(ctx, &cleanups) err := ca.buildWorkQueueByCatalog(ctx, ca.OpCapClient) diff --git a/internal/capability/types.go b/internal/capability/types.go index 0d6b751..1214779 100644 --- a/internal/capability/types.go +++ b/internal/capability/types.go @@ -2,7 +2,6 @@ package capability import ( "context" - "errors" "time" "github.com/opdev/opcap/internal/operator" @@ -27,37 +26,3 @@ type ( auditFn func(context.Context) error auditCleanupFn func(context.Context) error ) - -type Stack[T any] struct { - stack *element[T] -} - -type element[T any] struct { - previous *element[T] - val T -} - -var StackEmptyError = errors.New("Stack empty") - -func (s *Stack[T]) Push(v T) { - e := &element[T]{ - previous: s.stack, - val: v, - } - s.stack = e -} - -func (s *Stack[T]) Pop() (T, error) { - if s.stack == nil { - var r T - return r, StackEmptyError - } - e := *s.stack - s.stack = e.previous - - return e.val, nil -} - -func (s *Stack[T]) Empty() bool { - return s.stack == nil -} diff --git a/internal/types/stack.go b/internal/types/stack.go new file mode 100644 index 0000000..344922f --- /dev/null +++ b/internal/types/stack.go @@ -0,0 +1,37 @@ +package types + +import "errors" + +type Stack[T any] struct { + stack *element[T] +} + +type element[T any] struct { + previous *element[T] + val T +} + +var StackEmptyError = errors.New("stack empty") + +func (s *Stack[T]) Push(v T) { + e := &element[T]{ + previous: s.stack, + val: v, + } + s.stack = e +} + +func (s *Stack[T]) Pop() (T, error) { + if s.stack == nil { + var r T + return r, StackEmptyError + } + e := *s.stack + s.stack = e.previous + + return e.val, nil +} + +func (s *Stack[T]) Empty() bool { + return s.stack == nil +} diff --git a/internal/capability/types_test.go b/internal/types/stack_test.go similarity index 97% rename from internal/capability/types_test.go rename to internal/types/stack_test.go index 4cda93c..b45836d 100644 --- a/internal/capability/types_test.go +++ b/internal/types/stack_test.go @@ -1,4 +1,4 @@ -package capability +package types import ( . "github.com/onsi/ginkgo/v2"