kvstore_manage.go 892 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package kvstore
  2. import (
  3. "fmt"
  4. "sort"
  5. "strings"
  6. )
  7. // Initialize creates a new Store object, initializing the client
  8. type Initialize func(addrs []string, options *Config) (Store, error)
  9. var (
  10. // Backend initializers
  11. initializers = make(map[Backend]Initialize)
  12. supportedBackend = func() string {
  13. keys := make([]string, 0, len(initializers))
  14. for k := range initializers {
  15. keys = append(keys, string(k))
  16. }
  17. sort.Strings(keys)
  18. return strings.Join(keys, ", ")
  19. }()
  20. )
  21. // New creates an instance of store
  22. func New(backend Backend, addrs []string, options *Config) (Store, error) {
  23. if init, exists := initializers[backend]; exists {
  24. return init(addrs, options)
  25. }
  26. return nil, fmt.Errorf("%s %s", ErrBackendNotSupported.Error(), supportedBackend)
  27. }
  28. // AddStore adds a new store backend to libkv
  29. func AddStore(store Backend, init Initialize) {
  30. initializers[store] = init
  31. }