summaryrefslogtreecommitdiff
path: root/pkg/server/automap.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-02-20 19:34:58 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-02-21 05:54:58 +0300
commit6a25466ac3a8b94b08a3114c9e5cc721ed620d49 (patch)
tree568012861f7c331359b5b946175dfcd2322af8d0 /pkg/server/automap.go
parent9e04a8bee8492cb662ebc8b7fd50a23c48c7d03f (diff)
tunnel del,rename commands
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
+}