github.com/wrgl/wrgl@v0.14.0/pkg/objects/mock/store.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright © 2022 Wrangle Ltd 3 4 package objmock 5 6 import ( 7 "strings" 8 9 "github.com/wrgl/wrgl/pkg/objects" 10 ) 11 12 type Store struct { 13 m map[string][]byte 14 } 15 16 func NewStore() *Store { 17 return &Store{ 18 m: map[string][]byte{}, 19 } 20 } 21 22 func (s *Store) Get(key []byte) ([]byte, error) { 23 if v, ok := s.m[string(key)]; ok { 24 return v, nil 25 } 26 return nil, objects.ErrKeyNotFound 27 } 28 29 func (s *Store) Set(key, val []byte) error { 30 s.m[string(key)] = make([]byte, len(val)) 31 copy(s.m[string(key)], val) 32 return nil 33 } 34 35 func (s *Store) Delete(key []byte) error { 36 delete(s.m, string(key)) 37 return nil 38 } 39 40 func (s *Store) Exist(key []byte) bool { 41 if _, ok := s.m[string(key)]; ok { 42 return true 43 } 44 return false 45 } 46 47 func (s *Store) Filter(prefix []byte) (map[string][]byte, error) { 48 m := map[string][]byte{} 49 for k, v := range s.m { 50 if strings.HasPrefix(k, string(prefix)) { 51 m[k] = v 52 } 53 } 54 return m, nil 55 } 56 57 func (s *Store) FilterKey(prefix []byte) ([][]byte, error) { 58 keys := [][]byte{} 59 for k := range s.m { 60 if strings.HasPrefix(k, string(prefix)) { 61 keys = append(keys, []byte(k)) 62 } 63 } 64 return keys, nil 65 } 66 67 func (s *Store) Clear(prefix []byte) error { 68 for k := range s.m { 69 if strings.HasPrefix(k, string(prefix)) { 70 delete(s.m, k) 71 } 72 } 73 return nil 74 } 75 76 func (s *Store) Close() error { 77 return nil 78 }