github.com/lusis/distribution@v2.0.1+incompatible/registry/storage/driver/middleware/storagemiddleware.go (about) 1 package storagemiddleware 2 3 import ( 4 "fmt" 5 6 storagedriver "github.com/docker/distribution/registry/storage/driver" 7 ) 8 9 // InitFunc is the type of a StorageMiddleware factory function and is 10 // used to register the constructor for different StorageMiddleware backends. 11 type InitFunc func(storageDriver storagedriver.StorageDriver, options map[string]interface{}) (storagedriver.StorageDriver, error) 12 13 var storageMiddlewares map[string]InitFunc 14 15 // Register is used to register an InitFunc for 16 // a StorageMiddleware backend with the given name. 17 func Register(name string, initFunc InitFunc) error { 18 if storageMiddlewares == nil { 19 storageMiddlewares = make(map[string]InitFunc) 20 } 21 if _, exists := storageMiddlewares[name]; exists { 22 return fmt.Errorf("name already registered: %s", name) 23 } 24 25 storageMiddlewares[name] = initFunc 26 27 return nil 28 } 29 30 // Get constructs a StorageMiddleware with the given options using the named backend. 31 func Get(name string, options map[string]interface{}, storageDriver storagedriver.StorageDriver) (storagedriver.StorageDriver, error) { 32 if storageMiddlewares != nil { 33 if initFunc, exists := storageMiddlewares[name]; exists { 34 return initFunc(storageDriver, options) 35 } 36 } 37 38 return nil, fmt.Errorf("no storage middleware registered with name: %s", name) 39 }