34 lines
609 B
Go
34 lines
609 B
Go
package store
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"codeberg.org/danjones000/lenore/config"
|
|
)
|
|
|
|
var ErrNoFactory = errors.New("unknown factory")
|
|
|
|
type StoreFactory func(config.Config) (Store, error)
|
|
|
|
var factories map[string]StoreFactory
|
|
|
|
func init() {
|
|
factories = make(map[string]StoreFactory)
|
|
}
|
|
|
|
func AddFactory(name string, f StoreFactory) {
|
|
factories[name] = f
|
|
}
|
|
|
|
func GetFactory(name string) StoreFactory {
|
|
return factories[name]
|
|
}
|
|
|
|
func MakeStore(name string, conf config.Config) (Store, error) {
|
|
f, ok := factories[name]
|
|
if !ok {
|
|
return nil, fmt.Errorf("%w: %s", ErrNoFactory, name)
|
|
}
|
|
return f(conf)
|
|
}
|