package storage import ( "fmt" "io" "gitea.inhome.blapointe.com/local/storage/minio" "gitea.inhome.blapointe.com/local/storage/rclone" ) type DBStream interface { GetStream(string, ...string) (io.Reader, error) SetStream(string, io.Reader, ...string) error } type DB interface { Get(string, ...string) ([]byte, error) Set(string, []byte, ...string) error List([]string, ...string) ([]string, error) Close() error //Namespaces() ([][]string, error) } func New(key Type, params ...string) (db DB, err error) { defer func() { if i := recover(); i != nil { err = fmt.Errorf("panic making %s: %v", key, i) } }() err = ErrNotImpl switch key { case DYNOMITE: db, err = NewDynomite(params[0], params[1], params[2]) case REDIS: db, err = NewRedis(params[0], params[1], params[2]) case MAPSTREAM: db = NewMapStream() err = nil case MAP: db = NewMap() err = nil case RCLONE: db, err = rclone.NewRClone(params[0], params[1]) case FILES: db, err = NewFiles(params[0]) case YAML: db, err = NewYaml(params[0]) case BOLT: db, err = NewBolt(params[0]) case MINIO: db, err = minio.NewMinio(params[0], params[1], params[2]) case CACHE: db, err = NewCache(params...) case LEVELDB: db, err = NewLevelDB(params[0]) case MONGO: db, err = NewMongo(params[0], params[1:]...) } return }