70 lines
1.1 KiB
Go
Executable File
70 lines
1.1 KiB
Go
Executable File
package storage
|
|
|
|
import (
|
|
"fmt"
|
|
"gitea.inhome.blapointe.com/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 ErrNotFound
|
|
}
|
|
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)
|
|
}
|
|
if value == nil {
|
|
if _, ok := m[ns][key]; ok {
|
|
delete(m[ns], key)
|
|
}
|
|
return nil
|
|
}
|
|
b, err := value.Encode()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m[ns][key] = b
|
|
return nil
|
|
}
|