forked from taskcluster/taskcluster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcapabilities.go
56 lines (47 loc) · 1.04 KB
/
capabilities.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
package workerproto
import "sort"
type capabilities struct {
// use a map as a poor-man's set
capabilities map[string]bool
}
func EmptyCapabilities() *capabilities {
return &capabilities{
capabilities: make(map[string]bool),
}
}
func FromCapabilitiesList(caplist []string) *capabilities {
caps := make(map[string]bool)
for _, c := range caplist {
caps[c] = true
}
return &capabilities{
capabilities: caps,
}
}
func (caps *capabilities) List() []string {
rv := make([]string, 0, len(caps.capabilities))
for c := range caps.capabilities {
rv = append(rv, c)
}
sort.Strings(rv)
return rv
}
func (caps *capabilities) Add(c string) {
caps.capabilities[c] = true
}
func (caps *capabilities) Remove(c string) {
delete(caps.capabilities, c)
}
func (caps *capabilities) Has(c string) bool {
_, has := caps.capabilities[c]
return has
}
func (caps *capabilities) LimitTo(other *capabilities) {
newcaps := make(map[string]bool)
for c := range caps.capabilities {
if other.Has(c) {
newcaps[c] = true
}
}
caps.capabilities = newcaps
}