// mergeGroupMeta takes an lhs and an rhs GroupMeta, then builds a resulting GroupMeta that contains the // merged information. Order of merging matters: lhs wins. func mergeGroupMeta(lhs, rhs apimachinery.GroupMeta) apimachinery.GroupMeta { merged := apimachinery.GroupMeta{} merged.GroupVersion = lhs.GroupVersion merged.SelfLinker = lhs.SelfLinker knownGVs := sets.String{} for _, lhsGV := range lhs.GroupVersions { knownGVs.Insert(lhsGV.String()) merged.GroupVersions = append(merged.GroupVersions, lhsGV) } for _, rhsGV := range lhs.GroupVersions { if knownGVs.Has(rhsGV.String()) { continue } merged.GroupVersions = append(merged.GroupVersions, rhsGV) } merged.RESTMapper = meta.MultiRESTMapper(append([]meta.RESTMapper{}, lhs.RESTMapper, rhs.RESTMapper)) merged.InterfacesFor = func(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) { if ret, err := lhs.InterfacesFor(version); err == nil { return ret, nil } return rhs.InterfacesFor(version) } return merged }