diff --git a/pkg/api/feature/feature.go b/pkg/api/feature/feature.go index 08dafb8cf..2c6619e18 100644 --- a/pkg/api/feature/feature.go +++ b/pkg/api/feature/feature.go @@ -20,17 +20,33 @@ package feature // features to empty values func NewDomainFeatures() *DomainFeatures { return &DomainFeatures{ - Keys: make(map[string]KeyFeatureSet), - Values: make(map[string]ValueFeatureSet), - Instances: make(map[string]InstanceFeatureSet)} + Keys: make(map[string]*KeyFeatureSet), + Values: make(map[string]*ValueFeatureSet), + Instances: make(map[string]*InstanceFeatureSet)} } -func NewKeyFeatures() *KeyFeatureSet { return &KeyFeatureSet{Elements: make(map[string]Nil)} } - -func NewValueFeatures() *ValueFeatureSet { return &ValueFeatureSet{Elements: make(map[string]string)} } - -func NewInstanceFeatures() *InstanceFeatureSet { return &InstanceFeatureSet{} } - -func NewInstanceFeature() *InstanceFeature { - return &InstanceFeature{Attributes: make(map[string]string)} +func NewKeyFeatures(keys ...string) *KeyFeatureSet { + e := make(map[string]Nil, len(keys)) + for _, k := range keys { + e[k] = Nil{} + } + return &KeyFeatureSet{Elements: e} +} + +func NewValueFeatures(values map[string]string) *ValueFeatureSet { + if values == nil { + values = make(map[string]string) + } + return &ValueFeatureSet{Elements: values} +} + +func NewInstanceFeatures(instances []InstanceFeature) *InstanceFeatureSet { + return &InstanceFeatureSet{Elements: instances} +} + +func NewInstanceFeature(attrs map[string]string) *InstanceFeature { + if attrs == nil { + attrs = make(map[string]string) + } + return &InstanceFeature{Attributes: attrs} } diff --git a/pkg/api/feature/types.go b/pkg/api/feature/types.go index dbcf6655a..c514a85ad 100644 --- a/pkg/api/feature/types.go +++ b/pkg/api/feature/types.go @@ -22,9 +22,9 @@ type Features map[string]*DomainFeatures // DomainFeatures is the collection of all discovered features of one domain. type DomainFeatures struct { - Keys map[string]KeyFeatureSet `protobuf:"bytes,1,rep,name=keys"` - Values map[string]ValueFeatureSet `protobuf:"bytes,2,rep,name=values"` - Instances map[string]InstanceFeatureSet `protobuf:"bytes,3,rep,name=instances"` + Keys map[string]*KeyFeatureSet `protobuf:"bytes,1,rep,name=keys"` + Values map[string]*ValueFeatureSet `protobuf:"bytes,2,rep,name=values"` + Instances map[string]*InstanceFeatureSet `protobuf:"bytes,3,rep,name=instances"` } // KeyFeatureSet is a set of simple features only containing names without values.