From 7d65e5442198249b65fc3089caa9701ed3ee0470 Mon Sep 17 00:00:00 2001 From: Sri Kidambi <1702865+kidambisrinivas@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:02:23 +0100 Subject: [PATCH 1/2] Add capabilities store --- pkg/capabilities/store/store.go | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 pkg/capabilities/store/store.go diff --git a/pkg/capabilities/store/store.go b/pkg/capabilities/store/store.go new file mode 100644 index 000000000..9c1f736d8 --- /dev/null +++ b/pkg/capabilities/store/store.go @@ -0,0 +1,61 @@ +package store + +import ( + "fmt" + "sync" +) + +type capabilitiesStore[T any] struct { + mu sync.RWMutex + capabilities map[string]T +} + +type CapabilitiesStore[T any] interface { + Read(capabilityID string) (value T, ok bool) + ReadAll() (values map[string]T) + Write(capabilityID string, value T) + Delete(capabilityID string) +} + +var _ CapabilitiesStore[string] = (CapabilitiesStore[string])(nil) + +func NewCapabilitiesStore[T any]() CapabilitiesStore[T] { + return &capabilitiesStore[T]{ + capabilities: map[string]T{}, + } +} + +func (cs *capabilitiesStore[T]) Read(capabilityID string) (value T, ok bool) { + cs.mu.RLock() + defer cs.mu.RUnlock() + trigger, ok := cs.capabilities[capabilityID] + return trigger, ok +} + +func (cs *capabilitiesStore[T]) ReadAll() (values map[string]T) { + cs.mu.RLock() + defer cs.mu.RUnlock() + return cs.capabilities +} + +func (cs *capabilitiesStore[T]) Write(capabilityID string, value T) { + cs.mu.Lock() + defer cs.mu.Unlock() + cs.capabilities[capabilityID] = value +} + +func (cs *capabilitiesStore[T]) InsertIfNotExists(capabilityID string, value T) error { + cs.mu.Lock() + defer cs.mu.Unlock() + if _, ok := cs.capabilities[capabilityID]; ok { + return fmt.Errorf("capabilityID %v already exists in CapabilitiesStore", capabilityID) + } + cs.capabilities[capabilityID] = value + return nil +} + +func (cs *capabilitiesStore[T]) Delete(capabilityID string) { + cs.mu.Lock() + defer cs.mu.Unlock() + delete(cs.capabilities, capabilityID) +} From 0673ed881cd967b278f14cf8aea2af32dab998f9 Mon Sep 17 00:00:00 2001 From: Sri Kidambi <1702865+kidambisrinivas@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:04:10 +0100 Subject: [PATCH 2/2] Update interface --- pkg/capabilities/store/store.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/capabilities/store/store.go b/pkg/capabilities/store/store.go index 9c1f736d8..49545f993 100644 --- a/pkg/capabilities/store/store.go +++ b/pkg/capabilities/store/store.go @@ -14,6 +14,7 @@ type CapabilitiesStore[T any] interface { Read(capabilityID string) (value T, ok bool) ReadAll() (values map[string]T) Write(capabilityID string, value T) + InsertIfNotExists(capabilityID string, value T) error Delete(capabilityID string) }