e2etest/newe2e_object_resource_mapping.go (67 lines of code) (raw):

package e2etest import ( "path" ) // this should maybe be in newe2e_resource_definitions but it felt relevant to have on it's own var _ ObjectResourceMapping = ObjectResourceMappingFlat{} var _ ObjectResourceMapping = ObjectResourceMappingObject{} var _ ObjectResourceMapping = ObjectResourceMappingFolder{} var _ ObjectResourceMapping = ObjectResourceMappingParentFolder{} type ObjectResourceMapping interface { // Flatten returns a set of objects, flat mapped, as the root of container space. // "" is the root, or self. This is useful for setting folder properties, or creating single files under folders. Flatten() map[string]ResourceDefinitionObject } type ObjectResourceMappingFlat map[string]ResourceDefinitionObject // todo: convert to hierarchical? func (o ObjectResourceMappingFlat) Flatten() map[string]ResourceDefinitionObject { return o // We're already flat! } // ObjectResourceMappingOverlay appends new objects at the same level without modifying the underlying ObjectResourceMapping. // Objects in Overlay overwrite objects in Base, so, this can also be used to override an object with custom options. type ObjectResourceMappingOverlay struct { Base ObjectResourceMapping Overlay ObjectResourceMapping } func (o ObjectResourceMappingOverlay) Flatten() map[string]ResourceDefinitionObject { var out map[string]ResourceDefinitionObject if o.Base != nil { out = o.Base.Flatten() } else { out = make(map[string]ResourceDefinitionObject) } if o.Overlay != nil { for k, v := range o.Overlay.Flatten() { out[k] = v } } return out } // ObjectResourceMappingParentFolder appends a parent folder to all objects under Children. type ObjectResourceMappingParentFolder struct { FolderName string Children ObjectResourceMapping } func (o ObjectResourceMappingParentFolder) Flatten() map[string]ResourceDefinitionObject { base := o.Children.Flatten() out := make(map[string]ResourceDefinitionObject) for k, v := range base { out[path.Join(o.FolderName, k)] = v } return out } type ObjectResourceMappingFolder struct { ResourceDefinitionObject Children map[string]ObjectResourceMapping } func (o ObjectResourceMappingFolder) Flatten() map[string]ResourceDefinitionObject { out := map[string]ResourceDefinitionObject{ "": o.ResourceDefinitionObject, } for childName, child := range o.Children { grandchildren := child.Flatten() for grandChildName, grandChild := range grandchildren { out[path.Join(childName, grandChildName)] = grandChild } } return out } type ObjectResourceMappingObject ResourceDefinitionObject func (o ObjectResourceMappingObject) Flatten() map[string]ResourceDefinitionObject { return map[string]ResourceDefinitionObject{ "": ResourceDefinitionObject(o), } }