code: func (s *store) GetToList(ctx context.Context, key string, resourceVersion string, pred storage.SelectionPredicate, listObj runtime.Object) error {
  	trace := utiltrace.New(fmt.Sprintf("GetToList etcd3: key=%v, resourceVersion=%s, limit: %d, continue: %s", key, resourceVersion, pred.Limit, pred.Continue))
  	defer trace.LogIfLong(500 * time.Millisecond)
  	listPtr, err := meta.GetItemsPtr(listObj)
  	if err != nil {
  		return err
  	}
  	v, err := conversion.EnforcePtr(listPtr)
  	if err != nil || v.Kind() != reflect.Slice {
  		panic("need ptr to slice")
  	}
  
  	key = path.Join(s.pathPrefix, key)
  	startTime := time.Now()
  	getResp, err := s.client.KV.Get(ctx, key, s.getOps...)
  	metrics.RecordEtcdRequestLatency("get", getTypeName(listPtr), startTime)
  	if err != nil {
  		return err
  	}
  
  	if len(getResp.Kvs) > 0 {
  		data, _, err := s.transformer.TransformFromStorage(getResp.Kvs[0].Value, authenticatedDataString(key))
  		if err != nil {
  			return storage.NewInternalError(err.Error())
  		}
  		if err := appendListItem(v, data, uint64(getResp.Kvs[0].ModRevision), pred, s.codec, s.versioner); err != nil {
  			return err
  		}
  	}
  	// update version with cluster level revision
  	return s.versioner.UpdateList(listObj, uint64(getResp.Header.Revision), "")
  }
docs: // GetToList implements storage.Interface.GetToList.