libkv.go 982 B

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