code: func newREST(resource schema.GroupResource, kind, listKind schema.GroupVersionKind, strategy customResourceStrategy, optsGetter generic.RESTOptionsGetter, categories []string, tableConvertor rest.TableConvertor) (*REST, *StatusREST) {
  	store := &genericregistry.Store{
  		NewFunc: func() runtime.Object {
  			// set the expected group/version/kind in the new object as a signal to the versioning decoder
  			ret := &unstructured.Unstructured{}
  			ret.SetGroupVersionKind(kind)
  			return ret
  		},
  		NewListFunc: func() runtime.Object {
  			// lists are never stored, only manufactured, so stomp in the right kind
  			ret := &unstructured.UnstructuredList{}
  			ret.SetGroupVersionKind(listKind)
  			return ret
  		},
  		PredicateFunc:            strategy.MatchCustomResourceDefinitionStorage,
  		DefaultQualifiedResource: resource,
  
  		CreateStrategy: strategy,
  		UpdateStrategy: strategy,
  		DeleteStrategy: strategy,
  
  		TableConvertor: tableConvertor,
  	}
  	options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: strategy.GetAttrs}
  	if err := store.CompleteWithOptions(options); err != nil {
  		panic(err) // TODO: Propagate error up
  	}
  
  	statusStore := *store
  	statusStore.UpdateStrategy = NewStatusStrategy(strategy)
  	return &REST{store, categories}, &StatusREST{store: &statusStore}
  }
docs: // newREST returns a RESTStorage object that will work against API services.