// GetResource returns a function that handles retrieving a single resource from a rest.Storage object. func GetResource(r rest.Getter, e rest.Exporter, scope RequestScope) restful.RouteFunction { return getResourceHandler(scope, func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) { // For performance tracking purposes. trace := util.NewTrace("Get " + req.Request.URL.Path) defer trace.LogIfLong(250 * time.Millisecond) // check for export if values := req.Request.URL.Query(); len(values) > 0 { // TODO: this is internal version, not unversioned exports := unversioned.ExportOptions{} if err := scope.ParameterCodec.DecodeParameters(values, unversioned.GroupVersion{Version: "v1"}, &exports); err != nil { return nil, err } if exports.Export { if e == nil { return nil, errors.NewBadRequest(fmt.Sprintf("export of %q is not supported", scope.Resource.Resource)) } return e.Export(ctx, name, exports) } } return r.Get(ctx, name) }) }
// GetResource returns a function that handles retrieving a single resource from a rest.Storage object. func GetResource(r rest.Getter, e rest.Exporter, scope RequestScope) restful.RouteFunction { return getResourceHandler(scope, func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) { // For performance tracking purposes. trace := util.NewTrace("Get " + req.Request.URL.Path) defer trace.LogIfLong(250 * time.Millisecond) opts := v1.ExportOptions{} if err := scope.Codec.DecodeParametersInto(req.Request.URL.Query(), &opts); err != nil { return nil, err } internalOpts := unversioned.ExportOptions{} scope.Convertor.Convert(&opts, &internalOpts) if internalOpts.Export { if e == nil { return nil, errors.NewBadRequest("export unsupported") } return e.Export(ctx, name, internalOpts) } return r.Get(ctx, name) }) }