ooni-probe-cli/internal/kvstore/memory.go
Simone Basso acd4ffff35
doc: cleanup and improve for recently moved pkgs (#354)
* chore(atomicx): review docs and add usage example

* chore(fsx): improve docs, return value, add examples

* fix(kvstore): correct typo and add example

* fix(multierror): add basic example

* doc: revamp ooapi documentation
2021-06-04 11:39:00 +02:00

43 lines
900 B
Go

// Package kvstore contains key-value stores.
package kvstore
import (
"errors"
"sync"
)
// ErrNoSuchKey indicates that there's no value for the given key.
var ErrNoSuchKey = errors.New("no such key")
// Memory is an in-memory key-value store.
type Memory struct {
// m is the underlying map.
m map[string][]byte
// mu provides mutual exclusion
mu sync.Mutex
}
// Get returns the specified key's value. In case of error, the
// error type is such that errors.Is(err, ErrNoSuchKey).
func (kvs *Memory) Get(key string) ([]byte, error) {
kvs.mu.Lock()
defer kvs.mu.Unlock()
value, ok := kvs.m[key]
if !ok {
return nil, ErrNoSuchKey
}
return value, nil
}
// Set sets a key into the key-value store.
func (kvs *Memory) Set(key string, value []byte) error {
kvs.mu.Lock()
defer kvs.mu.Unlock()
if kvs.m == nil {
kvs.m = make(map[string][]byte)
}
kvs.m[key] = value
return nil
}