-
Notifications
You must be signed in to change notification settings - Fork 29
/
callback.go
50 lines (43 loc) · 1.05 KB
/
callback.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
package util
import (
"errors"
"sort"
)
type Priority uint
const (
PRIO_HISTORY = 0
PRIO_BREAKPOINT = 1
)
type Callback struct {
Name string
Priority Priority
Func func() bool
}
func SetCallback(callbacks []*Callback, name string, priority Priority, callback func() bool) ([]*Callback, error) {
for _, c := range callbacks {
if name == c.Name {
return callbacks, errors.New("callback name is already used")
}
if priority == c.Priority {
return callbacks, errors.New("callback priority is already used")
}
}
callbacks = append(callbacks, &Callback{name, priority, callback})
sortCallbacks(callbacks)
return callbacks, nil
}
func RemoveCallback(callbacks []*Callback, name string) []*Callback {
for i, c := range callbacks {
if name == c.Name {
sortCallbacks(callbacks)
callbacks = append(callbacks[:i], callbacks[i+1:]...)
return callbacks
}
}
return callbacks
}
func sortCallbacks(callbacks []*Callback) {
sort.Slice(callbacks, func(i, j int) bool {
return callbacks[i].Priority < callbacks[j].Priority
})
}