34 lines
650 B
Go
34 lines
650 B
Go
package locator
|
|
|
|
import (
|
|
perr "git.markbailey.dev/cerbervs/ptpp/lib/error"
|
|
"git.markbailey.dev/cerbervs/ptpp/lib/locator/service"
|
|
"sync"
|
|
)
|
|
|
|
type Locator struct {
|
|
services map[string]service.Service
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
func (l *Locator) Register(s service.Service) {
|
|
l.mu.Lock()
|
|
defer l.mu.Unlock()
|
|
|
|
if l.services == nil {
|
|
l.services = make(map[string]service.Service)
|
|
}
|
|
l.services[s.Name()] = s
|
|
}
|
|
|
|
func (l *Locator) Locate(name string) (service.Service, error) {
|
|
l.mu.RLock()
|
|
defer l.mu.RUnlock()
|
|
|
|
s, ok := l.services[name]
|
|
if !ok {
|
|
return nil, perr.Wrap(service.ErrServiceNotFound{Name: name}, "locator")
|
|
}
|
|
return s, nil
|
|
}
|