From 9fb4385f6ea80e00782b03c42c0c160c2c10965e Mon Sep 17 00:00:00 2001 From: Asim Date: Sat, 7 Feb 2015 20:12:57 +0000 Subject: [PATCH] Add etcd store --- store/etcd_item.go | 14 ++++++++++++ store/etcd_store.go | 52 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 store/etcd_item.go create mode 100644 store/etcd_store.go diff --git a/store/etcd_item.go b/store/etcd_item.go new file mode 100644 index 00000000..979d9511 --- /dev/null +++ b/store/etcd_item.go @@ -0,0 +1,14 @@ +package store + +type EtcdItem struct { + key string + value []byte +} + +func (c *EtcdItem) Key() string { + return c.key +} + +func (c *EtcdItem) Value() []byte { + return c.value +} diff --git a/store/etcd_store.go b/store/etcd_store.go new file mode 100644 index 00000000..ccc87a37 --- /dev/null +++ b/store/etcd_store.go @@ -0,0 +1,52 @@ +package store + +import ( + "errors" + + "github.com/coreos/go-etcd/etcd" +) + +type EtcdStore struct { + Client *etcd.Client +} + +func (e *EtcdStore) Get(key string) (Item, error) { + kv, err := e.Client.Get(key, false, false) + if err != nil { + return nil, err + } + if kv == nil { + return nil, errors.New("key not found") + } + + return &EtcdItem{ + key: kv.Node.Key, + value: []byte(kv.Node.Value), + }, nil +} + +func (e *EtcdStore) Del(key string) error { + _, err := e.Client.Delete(key, false) + return err +} + +func (e *EtcdStore) Put(item Item) error { + _, err := e.Client.Set(item.Key(), string(item.Value()), 0) + + return err +} + +func (e *EtcdStore) NewItem(key string, value []byte) Item { + return &EtcdItem{ + key: key, + value: value, + } +} + +func NewEtcdStore() Store { + client := etcd.NewClient([]string{}) + + return &EtcdStore{ + Client: client, + } +}