/**
  * @param string $offset
  * @param string $itemCountPerPage
  * @throws Exception\InvalidArgumentException
  * @return \Matryoshka\Model\ResultSet\ResultSetInterface
  */
 protected function loadItems($offset = null, $itemCountPerPage = null)
 {
     $criteria = clone $this->criteria;
     if ($itemCountPerPage !== null) {
         $criteria->setLimit($itemCountPerPage);
     }
     if ($offset !== null) {
         $criteria->setOffset($offset);
     }
     if ($criteria->getPage() === null) {
         $criteria->setPage(1);
     }
     /* @var $restClient RestClientInterface */
     $restClient = $this->model->getDataGateway();
     if (!$restClient instanceof RestClientInterface) {
         throw new Exception\InvalidArgumentException(sprintf('Model must provide a %s datagateway', RestClientInterface::class));
     }
     $resultSet = $this->model->find($criteria);
     $payloadData = (array) $restClient->getLastResponseData();
     $this->count = null;
     if (isset($payloadData[$this->totalItemsParamName])) {
         $this->count = $payloadData[$this->totalItemsParamName];
     }
     $offset = $criteria->getOffset();
     $itemCountPerPage = $criteria->getLimit();
     $cacheKey = $offset . '-' . $itemCountPerPage;
     $this->preloadCache = [$cacheKey => $resultSet];
     return $resultSet;
 }
 /**
  * @param ResultSetInterface $resultSet
  * @return $this
  */
 public function setResultSetPrototype(ResultSetInterface $resultSet)
 {
     return parent::setResultSetPrototype($resultSet);
 }