36 lines
769 B
Go
36 lines
769 B
Go
package driver
|
|
|
|
import (
|
|
"net/url"
|
|
|
|
"forge.cadoles.com/arcad/edge/pkg/storage"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
var documentStoreFactories = make(map[string]DocumentStoreFactory, 0)
|
|
|
|
type DocumentStoreFactory func(url *url.URL) (storage.DocumentStore, error)
|
|
|
|
func RegisterDocumentStoreFactory(scheme string, factory DocumentStoreFactory) {
|
|
documentStoreFactories[scheme] = factory
|
|
}
|
|
|
|
func NewDocumentStore(dsn string) (storage.DocumentStore, error) {
|
|
url, err := url.Parse(dsn)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
factory, exists := documentStoreFactories[url.Scheme]
|
|
if !exists {
|
|
return nil, errors.WithStack(ErrSchemeNotRegistered)
|
|
}
|
|
|
|
store, err := factory(url)
|
|
if err != nil {
|
|
return nil, errors.WithStack(err)
|
|
}
|
|
|
|
return store, nil
|
|
}
|