mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
49 lines
919 B
Go
49 lines
919 B
Go
package result
|
|
|
|
import (
|
|
"github.com/crawlab-team/crawlab/core/interfaces"
|
|
"sync"
|
|
)
|
|
|
|
type ServiceRegistry struct {
|
|
// internals
|
|
services sync.Map
|
|
}
|
|
|
|
func (r *ServiceRegistry) Register(key string, fn interfaces.ResultServiceRegistryFn) {
|
|
r.services.Store(key, fn)
|
|
}
|
|
|
|
func (r *ServiceRegistry) Unregister(key string) {
|
|
r.services.Delete(key)
|
|
}
|
|
|
|
func (r *ServiceRegistry) Get(key string) (fn interfaces.ResultServiceRegistryFn) {
|
|
res, ok := r.services.Load(key)
|
|
if ok {
|
|
fn, ok = res.(interfaces.ResultServiceRegistryFn)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
return fn
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewResultServiceRegistry() (r interfaces.ResultServiceRegistry) {
|
|
r = &ServiceRegistry{
|
|
services: sync.Map{},
|
|
}
|
|
return r
|
|
}
|
|
|
|
var _svc interfaces.ResultServiceRegistry
|
|
|
|
func GetResultServiceRegistry() (r interfaces.ResultServiceRegistry) {
|
|
if _svc != nil {
|
|
return _svc
|
|
}
|
|
_svc = NewResultServiceRegistry()
|
|
return _svc
|
|
}
|