Begun data module
This commit is contained in:
33
core/data/registry/sinks.go
Normal file
33
core/data/registry/sinks.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package registry
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"gitlab.michelsen.id/phillmichelsen/tessera/core/data"
|
||||
)
|
||||
|
||||
type SinkFactory func(string) (data.Sink, error)
|
||||
|
||||
type Sinks struct {
|
||||
mu sync.RWMutex
|
||||
m map[string]SinkFactory
|
||||
}
|
||||
|
||||
func NewSinks() *Sinks { return &Sinks{m: make(map[string]SinkFactory)} }
|
||||
|
||||
func (r *Sinks) Register(name string, f SinkFactory) {
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
r.m[name] = f
|
||||
}
|
||||
|
||||
func (r *Sinks) New(name string, params string) (data.Sink, error) {
|
||||
r.mu.RLock()
|
||||
f, ok := r.m[name]
|
||||
r.mu.RUnlock()
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("unknown sink: %s", name)
|
||||
}
|
||||
return f(params)
|
||||
}
|
||||
Reference in New Issue
Block a user