client.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package client
  2. import (
  3. "errors"
  4. "fmt"
  5. "time"
  6. )
  7. var (
  8. ErrUnavailable = errors.New("client: no available etcd endpoints")
  9. ErrNoLeader = errors.New("client: no leader")
  10. ErrKeyNoExist = errors.New("client: key does not exist")
  11. ErrKeyExists = errors.New("client: key already exists")
  12. )
  13. type Client interface {
  14. Create(key, value string, ttl time.Duration) (*Response, error)
  15. Get(key string) (*Response, error)
  16. Watch(key string, idx uint64) Watcher
  17. RecursiveWatch(key string, idx uint64) Watcher
  18. }
  19. type Watcher interface {
  20. Next() (*Response, error)
  21. }
  22. type Response struct {
  23. Action string `json:"action"`
  24. Node *Node `json:"node"`
  25. PrevNode *Node `json:"prevNode"`
  26. }
  27. type Nodes []*Node
  28. type Node struct {
  29. Key string `json:"key"`
  30. Value string `json:"value"`
  31. Nodes Nodes `json:"nodes"`
  32. ModifiedIndex uint64 `json:"modifiedIndex"`
  33. CreatedIndex uint64 `json:"createdIndex"`
  34. }
  35. func (n *Node) String() string {
  36. return fmt.Sprintf("{Key: %s, CreatedIndex: %d, ModifiedIndex: %d}", n.Key, n.CreatedIndex, n.ModifiedIndex)
  37. }