1package flagstore
2
3import (
4 "context"
5)
6
7type MemFlagStore struct {
8 Data map[string][]string
9}
10
11func NewMemFlagStore() MemFlagStore {
12 return MemFlagStore{
13 Data: make(map[string][]string),
14 }
15}
16
17func (s MemFlagStore) Get(ctx context.Context, key string) ([]string, error) {
18 v, ok := s.Data[key]
19 if !ok {
20 return []string{}, nil
21 }
22 return v, nil
23}
24
25func (s MemFlagStore) Add(ctx context.Context, key string, flags []string) error {
26 v, ok := s.Data[key]
27 if !ok {
28 v = []string{}
29 }
30 v = append(v, flags...)
31 v = dedupeStrings(v)
32 s.Data[key] = v
33 return nil
34}
35
36// does not error if flags not in set
37func (s MemFlagStore) Remove(ctx context.Context, key string, flags []string) error {
38 if len(flags) == 0 {
39 return nil
40 }
41 v, ok := s.Data[key]
42 if !ok {
43 v = []string{}
44 }
45 m := make(map[string]bool, len(v))
46 for _, f := range v {
47 m[f] = true
48 }
49 for _, f := range flags {
50 delete(m, f)
51 }
52 out := []string{}
53 for f, _ := range m {
54 out = append(out, f)
55 }
56 s.Data[key] = out
57 return nil
58}