code: func (t *Transaction) FindAll(c *Collection, models interface{}) {
  	if c == nil {
  		t.setError(newNilCollectionError("FindAll"))
  		return
  	}
  	if !c.index {
  		t.setError(newUnindexedCollectionError("FindAll"))
  		return
  	}
  	// Since this is somewhat type-unsafe, we need to verify that
  	// models is the correct type
  	if err := c.checkModelsType(models); err != nil {
  		t.setError(fmt.Errorf("zoom: Error in FindAll or Transaction.FindAll: %s", err.Error()))
  		return
  	}
  	sortArgs := c.spec.sortArgs(c.spec.indexKey(), c.spec.fieldRedisNames(), 0, 0, false)
  	fieldNames := append(c.spec.fieldNames(), "-")
  	t.Command("SORT", sortArgs, newScanModelsHandler(c.spec, fieldNames, models))
  }
docs: // FindAll finds all the models of the given type and scans the values of the models into
  // models in an existing transaction. See http://redis.io/topics/transactions.
  // models must be a pointer to a slice of models with a type corresponding to the Collection.
  // findAll will grow the models slice as needed and if any of the models in the
  // models slice are nil, FindAll will use reflection to allocate memory for them.
  // Any errors encountered will be added to the transaction and returned as an error
  // when the transaction is executed.