func Open(url string) (Driver, error) {
	u, err := nurl.Parse(url)
	if err != nil {
		return nil, err
	}
	if u.Scheme == "" {
		return nil, fmt.Errorf("source driver: invalid URL scheme")
	}
	driversMu.RLock()
	d, ok := drivers[u.Scheme]
	driversMu.RUnlock()
	if !ok {
		return nil, fmt.Errorf("source driver: unknown driver %v (forgotton import?)", u.Scheme)
	}
	return d.Open(url)
}
Open returns a new driver instance.
package source
import (
	"fmt"
	"io"
	nurl "net/url"
	"sync"
)
var driversMu sync.RWMutex
var drivers = make(map[string]Driver)
type Driver interface {
	Open(url string) (Driver, error)
	Close() error
	First() (version uint, err error)
	Prev(version uint) (prevVersion uint, err error)
	Next(version uint) (nextVersion uint, err error)
	ReadUp(version uint) (r io.ReadCloser, identifier string, err error)
	ReadDown(version uint) (r io.ReadCloser, identifier string, err error)
}