William Petit
8e574c299b
All checks were successful
arcad/edge/pipeline/pr-master This commit looks good
36 lines
731 B
Go
36 lines
731 B
Go
package driver
|
|
|
|
import (
|
|
"net/url"
|
|
|
|
"forge.cadoles.com/arcad/edge/pkg/storage/share"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
var shareStoreFactories = make(map[string]ShareStoreFactory, 0)
|
|
|
|
type ShareStoreFactory func(url *url.URL) (share.Store, error)
|
|
|
|
func RegisterShareStoreFactory(scheme string, factory ShareStoreFactory) {
|
|
shareStoreFactories[scheme] = factory
|
|
}
|
|
|
|
func NewShareStore(dsn string) (share.Store, error) {
|
|
url, err := url.Parse(dsn)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
factory, exists := shareStoreFactories[url.Scheme]
|
|
if !exists {
|
|
return nil, errors.WithStack(ErrSchemeNotRegistered)
|
|
}
|
|
|
|
store, err := factory(url)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return store, nil
|
|
}
|