-
Notifications
You must be signed in to change notification settings - Fork 2
/
mapManager.go
85 lines (76 loc) · 1.6 KB
/
mapManager.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package data
import (
"encoding/json"
"net/http"
"github.com/gorilla/mux"
)
type MapManager struct {
name string
data map[string]string
}
func (m *MapManager) AddURI(uri string, key string) error {
m.data[key] = uri
return nil
}
func (m *MapManager) Del(key string) error {
delete(m.data, key)
return nil
}
func (m *MapManager) List() []string {
s := make([]string, 0)
for k, _ := range m.data {
s = append(s, k)
}
return s
}
func (m *MapManager) Get(key string) (string, bool) {
v, ok := m.data[key]
return v, ok
}
func (m *MapManager) Move(key1 string, key2 string) bool {
if v, ok := m.data[key1]; ok {
m.data[key2] = v
delete(m.data, key1)
return true
}
return false
}
func (m *MapManager) ServeTo(router *mux.Router) {
prefix := "/" + m.name
sub := router.PathPrefix(prefix).Subrouter()
sub.HandleFunc("/ls", func(w http.ResponseWriter, r *http.Request) {
jsonHic, _ := json.Marshal(m.data)
w.Write(jsonHic)
})
sub.HandleFunc("/list", func(w http.ResponseWriter, r *http.Request) {
jsonHic, _ := json.Marshal(m.List())
w.Write(jsonHic)
})
sub.HandleFunc("/get/{id}", func(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
id := params["id"]
content, ok := m.data[id]
if ok {
w.Write([]byte(content))
} else {
w.Write([]byte("can not find " + id))
}
})
}
func NewMapManager(uri string, name string) *MapManager {
data := loadURI(uri)
//d := make(map[string]string)
m := MapManager{
name,
data,
}
return &m
}
func InitMapManager(name string) *MapManager {
data := make(map[string]string)
m := MapManager{
name,
data,
}
return &m
}