From b5dcbbe998d633a077e41357132e92db335dec87 Mon Sep 17 00:00:00 2001 From: Asim Date: Sat, 23 May 2015 21:25:55 +0100 Subject: [PATCH] Use concrete Item rather than an interface. Removes unnecessary dupe structs --- store/consul_item.go | 14 -------------- store/consul_store.go | 21 +++++++-------------- store/etcd/etcd.go | 32 ++++++-------------------------- store/item.go | 6 ------ store/memcached/memcached.go | 34 +++++++--------------------------- store/memory/memory.go | 30 +++++------------------------- store/store.go | 18 +++++++++--------- 7 files changed, 34 insertions(+), 121 deletions(-) delete mode 100644 store/consul_item.go delete mode 100644 store/item.go diff --git a/store/consul_item.go b/store/consul_item.go deleted file mode 100644 index 3bffc6d5..00000000 --- a/store/consul_item.go +++ /dev/null @@ -1,14 +0,0 @@ -package store - -type consulItem struct { - key string - value []byte -} - -func (c *consulItem) Key() string { - return c.key -} - -func (c *consulItem) Value() []byte { - return c.value -} diff --git a/store/consul_store.go b/store/consul_store.go index a51bd61b..be79fbd5 100644 --- a/store/consul_store.go +++ b/store/consul_store.go @@ -10,7 +10,7 @@ type consulStore struct { Client *consul.Client } -func (c *consulStore) Get(key string) (Item, error) { +func (c *consulStore) Get(key string) (*Item, error) { kv, _, err := c.Client.KV().Get(key, nil) if err != nil { return nil, err @@ -19,9 +19,9 @@ func (c *consulStore) Get(key string) (Item, error) { return nil, errors.New("key not found") } - return &consulItem{ - key: kv.Key, - value: kv.Value, + return &Item{ + Key: kv.Key, + Value: kv.Value, }, nil } @@ -30,22 +30,15 @@ func (c *consulStore) Del(key string) error { return err } -func (c *consulStore) Put(item Item) error { +func (c *consulStore) Put(item *Item) error { _, err := c.Client.KV().Put(&consul.KVPair{ - Key: item.Key(), - Value: item.Value(), + Key: item.Key, + Value: item.Value, }, nil) return err } -func (c *consulStore) NewItem(key string, value []byte) Item { - return &consulItem{ - key: key, - value: value, - } -} - func newConsulStore(addrs []string, opt ...Option) Store { config := consul.DefaultConfig() if len(addrs) > 0 { diff --git a/store/etcd/etcd.go b/store/etcd/etcd.go index 03f3b8db..18cbd0c2 100644 --- a/store/etcd/etcd.go +++ b/store/etcd/etcd.go @@ -11,20 +11,7 @@ type estore struct { Client *etcd.Client } -type item struct { - key string - value []byte -} - -func (i *item) Key() string { - return i.key -} - -func (i *item) Value() []byte { - return i.value -} - -func (e *estore) Get(key string) (store.Item, error) { +func (e *estore) Get(key string) (*store.Item, error) { kv, err := e.Client.Get(key, false, false) if err != nil { return nil, err @@ -33,9 +20,9 @@ func (e *estore) Get(key string) (store.Item, error) { return nil, errors.New("key not found") } - return &item{ - key: kv.Node.Key, - value: []byte(kv.Node.Value), + return &store.Item{ + Key: kv.Node.Key, + Value: []byte(kv.Node.Value), }, nil } @@ -44,19 +31,12 @@ func (e *estore) Del(key string) error { return err } -func (e *estore) Put(item store.Item) error { - _, err := e.Client.Set(item.Key(), string(item.Value()), 0) +func (e *estore) Put(item *store.Item) error { + _, err := e.Client.Set(item.Key, string(item.Value), 0) return err } -func (e *estore) NewItem(key string, value []byte) store.Item { - return &item{ - key: key, - value: value, - } -} - func NewStore(addrs []string, opts ...store.Option) store.Store { if len(addrs) == 0 { addrs = []string{"127.0.0.1:2379"} diff --git a/store/item.go b/store/item.go deleted file mode 100644 index c0d7e23d..00000000 --- a/store/item.go +++ /dev/null @@ -1,6 +0,0 @@ -package store - -type Item interface { - Key() string - Value() []byte -} diff --git a/store/memcached/memcached.go b/store/memcached/memcached.go index 95530141..c7902717 100644 --- a/store/memcached/memcached.go +++ b/store/memcached/memcached.go @@ -11,20 +11,7 @@ type mstore struct { Client *mc.Client } -type item struct { - key string - value []byte -} - -func (i *item) Key() string { - return i.key -} - -func (i *item) Value() []byte { - return i.value -} - -func (m *mstore) Get(key string) (store.Item, error) { +func (m *mstore) Get(key string) (*store.Item, error) { kv, err := m.Client.Get(key) if err != nil && err == mc.ErrCacheMiss { return nil, errors.New("key not found") @@ -36,9 +23,9 @@ func (m *mstore) Get(key string) (store.Item, error) { return nil, errors.New("key not found") } - return &item{ - key: kv.Key, - value: kv.Value, + return &store.Item{ + Key: kv.Key, + Value: kv.Value, }, nil } @@ -46,20 +33,13 @@ func (m *mstore) Del(key string) error { return m.Client.Delete(key) } -func (m *mstore) Put(item store.Item) error { +func (m *mstore) Put(item *store.Item) error { return m.Client.Set(&mc.Item{ - Key: item.Key(), - Value: item.Value(), + Key: item.Key, + Value: item.Value, }) } -func (m *mstore) NewItem(key string, value []byte) store.Item { - return &item{ - key: key, - value: value, - } -} - func NewStore(addrs []string, opts ...store.Option) store.Store { if len(addrs) == 0 { addrs = []string{"127.0.0.1:11211"} diff --git a/store/memory/memory.go b/store/memory/memory.go index e5e84fb1..d39585da 100644 --- a/store/memory/memory.go +++ b/store/memory/memory.go @@ -9,23 +9,10 @@ import ( type mstore struct { sync.RWMutex - store map[string]store.Item + store map[string]*store.Item } -type item struct { - key string - value []byte -} - -func (i *item) Key() string { - return i.key -} - -func (i *item) Value() []byte { - return i.value -} - -func (m *mstore) Get(key string) (store.Item, error) { +func (m *mstore) Get(key string) (*store.Item, error) { m.RLock() v, ok := m.store[key] m.RUnlock() @@ -42,22 +29,15 @@ func (m *mstore) Del(key string) error { return nil } -func (m *mstore) Put(item store.Item) error { +func (m *mstore) Put(item *store.Item) error { m.Lock() - m.store[item.Key()] = item + m.store[item.Key] = item m.Unlock() return nil } -func (m *mstore) NewItem(key string, value []byte) store.Item { - return &item{ - key: key, - value: value, - } -} - func NewStore(addrs []string, opt ...store.Option) store.Store { return &mstore{ - store: make(map[string]store.Item), + store: make(map[string]*store.Item), } } diff --git a/store/store.go b/store/store.go index 389604a7..2caf0296 100644 --- a/store/store.go +++ b/store/store.go @@ -1,10 +1,14 @@ package store type Store interface { - Get(string) (Item, error) + Get(string) (*Item, error) Del(string) error - Put(Item) error - NewItem(string, []byte) Item + Put(*Item) error +} + +type Item struct { + Key string + Value []byte } type options struct{} @@ -19,7 +23,7 @@ func NewStore(addrs []string, opt ...Option) Store { return newConsulStore(addrs, opt...) } -func Get(key string) (Item, error) { +func Get(key string) (*Item, error) { return DefaultStore.Get(key) } @@ -27,10 +31,6 @@ func Del(key string) error { return DefaultStore.Del(key) } -func Put(item Item) error { +func Put(item *Item) error { return DefaultStore.Put(item) } - -func NewItem(key string, value []byte) Item { - return DefaultStore.NewItem(key, value) -}