-
Notifications
You must be signed in to change notification settings - Fork 0
/
memorydb.go
58 lines (50 loc) · 934 Bytes
/
memorydb.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
package main
import (
"errors"
"sync"
)
type MemoryDB struct {
m map[string]*Job
lock sync.RWMutex
}
func NewMemoryDB() *MemoryDB {
return &MemoryDB{
m: map[string]*Job{},
}
}
func (m *MemoryDB) GetAll() (ret []*Job, _ error) {
m.lock.RLock()
defer m.lock.RUnlock()
for _, v := range m.m {
ret = append(ret, v)
}
return
}
func (m *MemoryDB) Get(id string) (*Job, error) {
m.lock.RLock()
defer m.lock.RUnlock()
j, exist := m.m[id]
if !exist {
return nil, errors.New("NotFound")
}
return j, nil
}
func (m *MemoryDB) Delete(id string) error {
m.lock.Lock()
defer m.lock.Unlock()
if _, exists := m.m[id]; !exists {
return errors.New("Doesn't exist") // Used for testing
}
delete(m.m, id)
// log.Printf("After delete: %+v", m)
return nil
}
func (m *MemoryDB) Save(j *Job) error {
m.lock.Lock()
defer m.lock.Unlock()
m.m[j.Id] = j
return nil
}
func (m *MemoryDB) Close() error {
return nil
}