diff --git a/db.go b/db.go index 4d4aef3..28ff4ee 100644 --- a/db.go +++ b/db.go @@ -1,5 +1,7 @@ package storage +import "strings" + type DB interface { Get(string) ([]byte, error) Set(string, []byte) error @@ -7,3 +9,50 @@ type DB interface { } var DefaultNamespace = "namespace" + +type Type int + +const ( + MAP = Type(iota) + BOLT = Type(iota) + CACHE = Type(iota) + LEVELDB = Type(iota) + MEMCACHE = Type(iota) + MEMCACHECLUSTER = Type(iota) + MONGO = Type(iota) +) + +func (t Type) String() string { + switch t { + case MAP: + return "map" + case BOLT: + return "bolt" + case CACHE: + return "cache" + case LEVELDB: + return "leveldb" + case MEMCACHE: + return "memcache" + case MEMCACHECLUSTER: + return "memcachecluster" + case MONGO: + return "mongo" + } + return "" +} + +func TypeFromString(key string) Type { + key = strings.ToLower(key) + for i := 0; i < 30; i++ { + t := Type(i) + if t.String() == key { + return t + } + } + return Type(-1) +} + +func New(key Type) (DB, error) { + return nil, ErrNotImpl +} diff --git a/db_test.go b/db_test.go index 1d32f28..70c3bde 100644 --- a/db_test.go +++ b/db_test.go @@ -135,3 +135,48 @@ func TestImplementations(t *testing.T) { } } } + +func TestToFromString(t *testing.T) { + cases := []struct { + key string + t Type + }{ + { + key: "map", + t: MAP, + }, + { + key: "bolt", + t: BOLT, + }, + { + key: "cache", + t: CACHE, + }, + { + key: "leveldb", + t: LEVELDB, + }, + { + key: "memcache", + t: MEMCACHE, + }, + { + key: "memcachecluster", + t: MEMCACHECLUSTER, + }, + { + key: "mongo", + t: MONGO, + }, + } + + for _, c := range cases { + if TypeFromString(c.key) != c.t { + t.Errorf("wrong type for %v: got %v", c.key, TypeFromString(c.key)) + } + if c.key != c.t.String() { + t.Errorf("wrong string for %v (%v): got %v", int(c.t), c.key, c.t.String()) + } + } +} diff --git a/memcached.go b/memcache.go similarity index 100% rename from memcached.go rename to memcache.go diff --git a/memcachedcluster.go b/memcachecluster.go similarity index 100% rename from memcachedcluster.go rename to memcachecluster.go