diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-02-20 19:34:58 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-02-21 05:54:58 +0300 |
| commit | 6a25466ac3a8b94b08a3114c9e5cc721ed620d49 (patch) | |
| tree | 568012861f7c331359b5b946175dfcd2322af8d0 /pkg/server/automap.go | |
| parent | 9e04a8bee8492cb662ebc8b7fd50a23c48c7d03f (diff) | |
tunnel del,rename commands
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 +} |
