/**
  * Build Response From Cache
  *
  * @param Response $response Response
  * @param array    $cache    Cache
  *
  * @return Response Response
  */
 private function buildResponseFromCache(Response $response, array $cache)
 {
     $body = $response->getBody();
     $response = unserialize($cache['response']);
     $response = $response->withBody($body);
     $response->getBody()->write(unserialize($cache['body']));
     $response->getBody()->rewind();
     return $response;
 }
 /**
  * Apply Fractal
  *
  * @param Request  $request  Request
  * @param Response $response Response
  *
  * @return Response Response
  */
 private function applyFractal(Request $request, Response $response)
 {
     $fractal = new Manager();
     // if (isset($this->includes)) {
     //     $this->manager->parseIncludes($this->includes);
     // }
     $transformer = $this->transformer;
     $paginator = $this->paginator;
     $serializer = $this->serializer;
     if ($response->getItem()) {
         if ($transformer) {
             $resource = new Item($response->getItem(), $transformer);
         } else {
             $resource = new Item($response->getItem());
         }
     }
     if (is_array($response->getCollection())) {
         if ($transformer) {
             $resource = new Collection($response->getCollection(), $transformer);
         } else {
             $resource = new Collection($response->getCollection());
         }
         if ($paginator && ($criteria = $response->getCriteria())) {
             $paginator = $this->setCriteriaOnPaginator($paginator, $criteria);
             $resource->setPaginator($paginator);
         }
     }
     if (isset($resource)) {
         $fractal->setSerializer($serializer);
         $resource = $fractal->createData($resource)->toArray();
         $json = JsonHelper::encode($resource);
         $response = $response->withJson($json);
     }
     return $response;
 }