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
|
||
|
}
|