// Copyright (c) 2017 Daniel Oaks // released under the MIT license package caps import "sync" // Values holds capability values. type Values struct { sync.RWMutex // values holds our actual capability values. values map[Capability]string } // NewValues returns a new Values. func NewValues() *Values { return &Values{ values: make(map[Capability]string), } } // Set sets the value for the given capability. func (v *Values) Set(capab Capability, value string) { v.Lock() defer v.Unlock() v.values[capab] = value } // Unset removes the value for the given capability, if it exists. func (v *Values) Unset(capab Capability) { v.Lock() defer v.Unlock() delete(v.values, capab) } // Get returns the value of the given capability, and whether one exists. func (v *Values) Get(capab Capability) (string, bool) { v.RLock() defer v.RUnlock() value, exists := v.values[capab] return value, exists }