| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package store
- import (
- "context"
- "encoding/json"
- "sort"
- "sync"
- )
- var (
- registry map[string]Factory = map[string]Factory{}
- regLock sync.RWMutex
- )
- type Factory interface {
- Build(ctx context.Context, config json.RawMessage) (Interface, error)
- Valid(config json.RawMessage) error
- }
- func Register(name string, impl Factory) {
- regLock.Lock()
- defer regLock.Unlock()
- registry[name] = impl
- }
- func Get(name string) (Factory, bool) {
- regLock.RLock()
- defer regLock.RUnlock()
- result, ok := registry[name]
- return result, ok
- }
- func Methods() []string {
- regLock.RLock()
- defer regLock.RUnlock()
- var result []string
- for method := range registry {
- result = append(result, method)
- }
- sort.Strings(result)
- return result
- }
|