This commit is contained in:
Bel LaPointe
2019-02-18 09:31:35 -07:00
commit cbf886fb7e
14 changed files with 1016 additions and 0 deletions

64
storage/map.go Normal file
View File

@@ -0,0 +1,64 @@
package storage
import (
"errors"
"fmt"
"local/rproxy3/storage/packable"
)
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 k == "clients" {
if s != "" {
s += ",\n"
}
s += fmt.Sprintf("[%s]:[%v]", k, v)
} else {
for k1, _ := range v {
if s != "" {
s += ",\n"
}
str := packable.NewString("")
m.Get(k, k1, str)
s += fmt.Sprintf("[%s:%s]:[%v]", k, k1, str)
}
}
}
return s
}
func (m Map) Close() error {
m = nil
return nil
}
func (m Map) Get(ns, key string, value packable.Packable) error {
if _, ok := m[ns]; !ok {
m[ns] = make(map[string][]byte)
}
if _, ok := m[ns][key]; !ok {
return errors.New("not found")
}
return value.Decode(m[ns][key])
}
func (m Map) Set(ns, key string, value packable.Packable) error {
if _, ok := m[ns]; !ok {
m[ns] = make(map[string][]byte)
}
b, err := value.Encode()
if err != nil {
return err
}
m[ns][key] = b
return nil
}