75 lines
1.3 KiB
Go
75 lines
1.3 KiB
Go
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type Map map[string]map[string][]byte
|
|
|
|
func NewMap() *Map {
|
|
m := make(map[string]map[string][]byte)
|
|
n := Map(m)
|
|
return &n
|
|
}
|
|
|
|
func (m *Map) String() string {
|
|
s := ""
|
|
for k, v := range *m {
|
|
if s != "" {
|
|
s += ",\n"
|
|
}
|
|
s += fmt.Sprintf("[%s]:[%s]", k, v)
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (m *Map) Close() error {
|
|
m = nil
|
|
return nil
|
|
}
|
|
|
|
func (m *Map) List(ns []string, limits ...string) ([]string, error) {
|
|
namespace := resolveNamespace(ns)
|
|
limits = resolveLimits(limits)
|
|
|
|
keys := []string{}
|
|
if _, ok := (*m)[namespace]; !ok {
|
|
return nil, nil
|
|
}
|
|
for k := range (*m)[namespace] {
|
|
if k >= limits[0] && k <= limits[1] {
|
|
keys = append(keys, k)
|
|
}
|
|
}
|
|
|
|
return keys, nil
|
|
}
|
|
|
|
func (m *Map) Get(key string, ns ...string) ([]byte, error) {
|
|
namespace := resolveNamespace(ns)
|
|
if _, ok := (*m)[namespace]; !ok {
|
|
return nil, ErrNotFound
|
|
}
|
|
if _, ok := (*m)[namespace][key]; !ok {
|
|
return nil, ErrNotFound
|
|
}
|
|
return (*m)[namespace][key], nil
|
|
}
|
|
|
|
func (m *Map) Set(key string, value []byte, ns ...string) error {
|
|
namespace := resolveNamespace(ns)
|
|
if value == nil {
|
|
if _, ok := (*m)[namespace]; !ok {
|
|
return nil
|
|
} else if _, ok := (*m)[namespace][key]; ok {
|
|
delete((*m)[namespace], key)
|
|
}
|
|
} else {
|
|
if _, ok := (*m)[namespace]; !ok {
|
|
(*m)[namespace] = make(map[string][]byte)
|
|
}
|
|
(*m)[namespace][key] = value
|
|
}
|
|
return nil
|
|
}
|