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 }