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  }