| package libkv |
| |
| import ( |
| "fmt" |
| "sort" |
| "strings" |
| |
| "github.com/docker/libkv/store" |
| ) |
| |
| // Initialize creates a new Store object, initializing the client |
| type Initialize func(addrs []string, options *store.Config) (store.Store, error) |
| |
| var ( |
| // Backend initializers |
| initializers = make(map[store.Backend]Initialize) |
| |
| supportedBackend = func() string { |
| keys := make([]string, 0, len(initializers)) |
| for k := range initializers { |
| keys = append(keys, string(k)) |
| } |
| sort.Strings(keys) |
| return strings.Join(keys, ", ") |
| }() |
| ) |
| |
| // NewStore creates an instance of store |
| func NewStore(backend store.Backend, addrs []string, options *store.Config) (store.Store, error) { |
| if init, exists := initializers[backend]; exists { |
| return init(addrs, options) |
| } |
| |
| return nil, fmt.Errorf("%s %s", store.ErrBackendNotSupported.Error(), supportedBackend) |
| } |
| |
| // AddStore adds a new store backend to libkv |
| func AddStore(store store.Backend, init Initialize) { |
| initializers[store] = init |
| } |