diff options
Diffstat (limited to 'pkg/server/automap.go')
| -rw-r--r-- | pkg/server/automap.go | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/pkg/server/automap.go b/pkg/server/automap.go index 15cafe4..cf4de7d 100644 --- a/pkg/server/automap.go +++ b/pkg/server/automap.go @@ -1,12 +1,37 @@ package server -type automap map[int]interface{} +import ( + "errors" + "fmt" +) -func (m automap) add(v interface{}) int { - for k := 0;; k++ { +type automap map[string]interface{} + +var errExists = errors.New("already exists") +var errNotFound = errors.New("no such entry") + +func (m automap) add(v interface{}) string { + for n := 1;; n++ { + k := fmt.Sprintf("%d", n) if _, ok := m[k]; !ok { m[k] = v return k } } } + +func (m automap) rename(old string, new string) (interface{}, error) { + if _, ok := m[old]; !ok { + return nil, errNotFound + } + + if _, ok := m[new]; ok { + return nil, errExists + } + + v := m[old] + m[new] = v + + delete(m, old) + return v, nil +} |
