1package api 2 3import ( 4 "fmt" 5 "sort" 6) 7 8// Namespaces is used to query the namespace endpoints. 9type Namespaces struct { 10 client *Client 11} 12 13// Namespaces returns a new handle on the namespaces. 14func (c *Client) Namespaces() *Namespaces { 15 return &Namespaces{client: c} 16} 17 18// List is used to dump all of the namespaces. 19func (n *Namespaces) List(q *QueryOptions) ([]*Namespace, *QueryMeta, error) { 20 var resp []*Namespace 21 qm, err := n.client.query("/v1/namespaces", &resp, q) 22 if err != nil { 23 return nil, nil, err 24 } 25 sort.Sort(NamespaceIndexSort(resp)) 26 return resp, qm, nil 27} 28 29// PrefixList is used to do a PrefixList search over namespaces 30func (n *Namespaces) PrefixList(prefix string, q *QueryOptions) ([]*Namespace, *QueryMeta, error) { 31 if q == nil { 32 q = &QueryOptions{Prefix: prefix} 33 } else { 34 q.Prefix = prefix 35 } 36 37 return n.List(q) 38} 39 40// Info is used to query a single namespace by its name. 41func (n *Namespaces) Info(name string, q *QueryOptions) (*Namespace, *QueryMeta, error) { 42 var resp Namespace 43 qm, err := n.client.query("/v1/namespace/"+name, &resp, q) 44 if err != nil { 45 return nil, nil, err 46 } 47 return &resp, qm, nil 48} 49 50// Register is used to register a namespace. 51func (n *Namespaces) Register(namespace *Namespace, q *WriteOptions) (*WriteMeta, error) { 52 wm, err := n.client.write("/v1/namespace", namespace, nil, q) 53 if err != nil { 54 return nil, err 55 } 56 return wm, nil 57} 58 59// Delete is used to delete a namespace 60func (n *Namespaces) Delete(namespace string, q *WriteOptions) (*WriteMeta, error) { 61 wm, err := n.client.delete(fmt.Sprintf("/v1/namespace/%s", namespace), nil, q) 62 if err != nil { 63 return nil, err 64 } 65 return wm, nil 66} 67 68// Namespace is used to serialize a namespace. 69type Namespace struct { 70 Name string 71 Description string 72 Quota string 73 CreateIndex uint64 74 ModifyIndex uint64 75} 76 77// NamespaceIndexSort is a wrapper to sort Namespaces by CreateIndex. We 78// reverse the test so that we get the highest index first. 79type NamespaceIndexSort []*Namespace 80 81func (n NamespaceIndexSort) Len() int { 82 return len(n) 83} 84 85func (n NamespaceIndexSort) Less(i, j int) bool { 86 return n[i].CreateIndex > n[j].CreateIndex 87} 88 89func (n NamespaceIndexSort) Swap(i, j int) { 90 n[i], n[j] = n[j], n[i] 91} 92