package storage import ( "fmt" "net/url" "qurl/qurl" "qurl/storage/bolt" "strings" ) type Storage interface { AddQURL(*qurl.QURL) error GetQURLByURL(string) (*qurl.QURL, error) GetQURLByID(uint64) (*qurl.QURL, error) SetQURLSequence(uint64) error Backup(string) error Shutdown() } func NewStorage(su string) (Storage, error) { u, err := url.Parse(su) if err != nil { return nil, err } if u.Scheme == "" { return nil, fmt.Errorf("URL must include a scheme") } var stor Storage switch strings.ToLower(u.Scheme) { case "bolt", "boltdb", "bbolt": stor, err = bolt.New(u) if err != nil { return nil, err } default: return nil, fmt.Errorf("Unsupported URL scheme") } return stor, nil }