Files
kapow/internal/server/data/state.go
pancho horrillo b76fb1f77e Add method ListIDs() to internal/data/Handlers
Co-authored-by: Roberto Abdelkader Martínez Pérez <robertomartinezp@gmail.com>
2019-10-10 13:11:05 +02:00

50 lines
798 B
Go

package data
import (
"sync"
"github.com/BBVA/kapow/internal/server/model"
)
type safeHandlerMap struct {
hs map[string]*model.Handler
m *sync.RWMutex
}
var Handlers = New()
func New() safeHandlerMap {
return safeHandlerMap{
hs: make(map[string]*model.Handler),
m: &sync.RWMutex{},
}
}
func (shm *safeHandlerMap) Add(h *model.Handler) {
shm.m.Lock()
shm.hs[h.ID] = h
shm.m.Unlock()
}
func (shm *safeHandlerMap) Remove(id string) {
shm.m.Lock()
delete(shm.hs, id)
shm.m.Unlock()
}
func (shm *safeHandlerMap) Get(id string) (*model.Handler, bool) {
shm.m.RLock()
h, ok := shm.hs[id]
shm.m.RUnlock()
return h, ok
}
func (shm *safeHandlerMap) ListIDs() (ids []string) {
shm.m.RLock()
defer shm.m.RUnlock()
for id := range shm.hs {
ids = append(ids, id)
}
return
}