Fix incorrect type of SimpleValue(S)(G)etter

This commit is contained in:
Patrick Pacher 2020-09-21 15:19:31 +02:00
parent 50a10485e1
commit 511cb22759
No known key found for this signature in database
GPG key ID: E8CD2DA160925A6D
2 changed files with 20 additions and 4 deletions

View file

@ -38,7 +38,7 @@ type (
// SimpleValueSetterFunc is a convenience type for implementing a // SimpleValueSetterFunc is a convenience type for implementing a
// write-only value provider. // write-only value provider.
SimpleValueSetterFunc func(record.Record) error SimpleValueSetterFunc func(record.Record) (record.Record, error)
// SimpleValueGetterFunc is a convenience type for implementing a // SimpleValueGetterFunc is a convenience type for implementing a
// read-only value provider. // read-only value provider.
@ -46,7 +46,7 @@ type (
) )
// Set implements ValueProvider.Set and calls fn. // Set implements ValueProvider.Set and calls fn.
func (fn SimpleValueSetterFunc) Set(r record.Record) error { func (fn SimpleValueSetterFunc) Set(r record.Record) (record.Record, error) {
return fn(r) return fn(r)
} }
@ -56,11 +56,15 @@ func (SimpleValueSetterFunc) Get(_ string) ([]record.Record, error) {
} }
// Set implements ValueProvider.Set and returns ErrReadOnly. // Set implements ValueProvider.Set and returns ErrReadOnly.
func (SimpleValueGetterFunc) Set(r record.Record) error { func (SimpleValueGetterFunc) Set(r record.Record) (record.Record, error) {
return ErrReadOnly return nil, ErrReadOnly
} }
// Get implements ValueProvider.Get and calls fn. // Get implements ValueProvider.Get and calls fn.
func (fn SimpleValueGetterFunc) Get(keyOrPrefix string) ([]record.Record, error) { func (fn SimpleValueGetterFunc) Get(keyOrPrefix string) ([]record.Record, error) {
return fn(keyOrPrefix) return fn(keyOrPrefix)
} }
// compile time checks
var _ ValueProvider = SimpleValueGetterFunc(nil)
var _ ValueProvider = SimpleValueSetterFunc(nil)

View file

@ -40,6 +40,7 @@ type Registry struct {
l sync.RWMutex l sync.RWMutex
providers *radix.Tree providers *radix.Tree
dbController *database.Controller dbController *database.Controller
dbName string
} }
// keyedValueProvider simply wraps a value provider with it's // keyedValueProvider simply wraps a value provider with it's
@ -60,6 +61,16 @@ func isPrefixKey(key string) bool {
return strings.HasSuffix(key, "/") return strings.HasSuffix(key, "/")
} }
// DatabaseName returns the name of the database where the
// registry has been injected. It returns an empty string
// if InjectAsDatabase has not been called.
func (r *Registry) DatabaseName() string {
r.l.RLock()
defer r.l.RUnlock()
return r.dbName
}
// InjectAsDatabase injects the registry as the storage // InjectAsDatabase injects the registry as the storage
// database for name. // database for name.
func (r *Registry) InjectAsDatabase(name string) error { func (r *Registry) InjectAsDatabase(name string) error {
@ -75,6 +86,7 @@ func (r *Registry) InjectAsDatabase(name string) error {
return err return err
} }
r.dbName = name
r.dbController = ctrl r.dbController = ctrl
return nil return nil