summaryrefslogtreecommitdiff
path: root/pkg/server/automap.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/server/automap.go')
-rw-r--r--pkg/server/automap.go31
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
+}