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) Keys(ns string) []string { m2, _ := m[ns] result := make([]string, 0, len(m2)) for k := range m2 { result = append(result, k) } return result } 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 }