...
1 package client
2
3 import (
4 "context"
5 "fmt"
6 )
7
8 type KV struct {
9 Name string `json:"name"`
10 Props map[string]string `json:"props"`
11 }
12
13 type KeyValueStoreProvider interface {
14 List(ctx context.Context) ([]KV, error)
15 Get(ctx context.Context, kv string) (*KV, error)
16 CreateOrModify(ctx context.Context, kv string, modify GenericPropsModify) error
17 Delete(ctx context.Context, kv string) error
18 }
19
20 var _ KeyValueStoreProvider = &KeyValueStoreService{}
21
22 type KeyValueStoreService struct {
23 client *Client
24 }
25
26
27 func (k *KeyValueStoreService) List(ctx context.Context) ([]KV, error) {
28 var ret []KV
29
30 _, err := k.client.doGET(ctx, "/v1/key-value-store", &ret)
31 if err != nil {
32 return nil, err
33 }
34
35 return ret, nil
36 }
37
38 func (k *KeyValueStoreService) Get(ctx context.Context, kv string) (*KV, error) {
39 var ret []KV
40
41 _, err := k.client.doGET(ctx, "/v1/key-value-store/"+kv, &ret)
42 if err != nil {
43 return nil, err
44 }
45
46 if len(ret) != 1 {
47 return nil, fmt.Errorf("expected exactly one KV, got %d", len(ret))
48 }
49
50 return &ret[0], nil
51 }
52
53 func (k *KeyValueStoreService) CreateOrModify(ctx context.Context, kv string, modify GenericPropsModify) error {
54 _, err := k.client.doPUT(ctx, "/v1/key-value-store/"+kv, modify)
55 return err
56 }
57
58 func (k *KeyValueStoreService) Delete(ctx context.Context, kv string) error {
59 _, err := k.client.doDELETE(ctx, "/v1/key-value-store/"+kv, nil)
60 return err
61 }
62
View as plain text