Simplify the resource_encoding_config.go, since we don't need per group override at all

pull/564/head
Chao Xu 2018-09-28 16:07:31 -07:00
parent a76c266693
commit 4ea07084dd
1 changed files with 19 additions and 42 deletions

View File

@ -34,37 +34,27 @@ type ResourceEncodingConfig interface {
} }
type DefaultResourceEncodingConfig struct { type DefaultResourceEncodingConfig struct {
groups map[string]*GroupResourceEncodingConfig // resources records the overriding encoding configs for individual resources.
resources map[schema.GroupResource]*OverridingResourceEncoding
scheme *runtime.Scheme scheme *runtime.Scheme
} }
type GroupResourceEncodingConfig struct { type OverridingResourceEncoding struct {
ExternalResourceEncodings map[string]schema.GroupVersion ExternalResourceEncoding schema.GroupVersion
InternalResourceEncodings map[string]schema.GroupVersion InternalResourceEncoding schema.GroupVersion
} }
var _ ResourceEncodingConfig = &DefaultResourceEncodingConfig{} var _ ResourceEncodingConfig = &DefaultResourceEncodingConfig{}
func NewDefaultResourceEncodingConfig(scheme *runtime.Scheme) *DefaultResourceEncodingConfig { func NewDefaultResourceEncodingConfig(scheme *runtime.Scheme) *DefaultResourceEncodingConfig {
return &DefaultResourceEncodingConfig{groups: map[string]*GroupResourceEncodingConfig{}, scheme: scheme} return &DefaultResourceEncodingConfig{resources: map[schema.GroupResource]*OverridingResourceEncoding{}, scheme: scheme}
}
func newGroupResourceEncodingConfig() *GroupResourceEncodingConfig {
return &GroupResourceEncodingConfig{
ExternalResourceEncodings: map[string]schema.GroupVersion{},
InternalResourceEncodings: map[string]schema.GroupVersion{},
}
} }
func (o *DefaultResourceEncodingConfig) SetResourceEncoding(resourceBeingStored schema.GroupResource, externalEncodingVersion, internalVersion schema.GroupVersion) { func (o *DefaultResourceEncodingConfig) SetResourceEncoding(resourceBeingStored schema.GroupResource, externalEncodingVersion, internalVersion schema.GroupVersion) {
group := resourceBeingStored.Group o.resources[resourceBeingStored] = &OverridingResourceEncoding{
_, groupExists := o.groups[group] ExternalResourceEncoding: externalEncodingVersion,
if !groupExists { InternalResourceEncoding: internalVersion,
o.groups[group] = newGroupResourceEncodingConfig()
} }
o.groups[group].ExternalResourceEncodings[resourceBeingStored.Resource] = externalEncodingVersion
o.groups[group].InternalResourceEncodings[resourceBeingStored.Resource] = internalVersion
} }
func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) { func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) {
@ -72,20 +62,13 @@ func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.Group
return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group) return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group)
} }
groupEncoding, groupExists := o.groups[resource.Group] resourceOverride, resourceExists := o.resources[resource]
if resourceExists {
if !groupExists { return resourceOverride.ExternalResourceEncoding, nil
// return the most preferred external version for the group
return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil
} }
resourceOverride, resourceExists := groupEncoding.ExternalResourceEncodings[resource.Resource]
if !resourceExists {
// return the most preferred external version for the group // return the most preferred external version for the group
return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil
}
return resourceOverride, nil
} }
func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) { func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) {
@ -93,15 +76,9 @@ func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.Grou
return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group) return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group)
} }
groupEncoding, groupExists := o.groups[resource.Group] resourceOverride, resourceExists := o.resources[resource]
if !groupExists { if resourceExists {
return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil return resourceOverride.InternalResourceEncoding, nil
} }
resourceOverride, resourceExists := groupEncoding.InternalResourceEncodings[resource.Resource]
if !resourceExists {
return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil
}
return resourceOverride, nil
} }