public function process(ResponseInterface $response, ResourceDefinitionInterface $resource)
 {
     if (!$response instanceof ApiResponse) {
         throw new InvalidArgumentException(sprintf('Expected an `ApiResponse`, got `%s` instead', get_class($response)));
     }
     $returnType = $resource->getReturnType();
     $config = new Configuration($returnType);
     $hydratorClass = $config->createFactory()->getHydratorClass();
     $hydrator = new $hydratorClass();
     $object = new $returnType();
     if ($resource->getMethod() !== ResourceDefinitionInterface::METHOD_CGET) {
         return $hydrator->hydrate($response->getData(), $object);
     }
     $result = [];
     foreach ($response->getData() as $item) {
         $current = clone $object;
         $result[] = $hydrator->hydrate($item, $current);
     }
     return $result;
 }
 /**
  * @param ResponseInterface           $response
  * @param ResourceDefinitionInterface $resource
  * @return array
  */
 public function process(ResponseInterface $response, ResourceDefinitionInterface $resource)
 {
     if (!$response instanceof ApiResponse) {
         throw new \InvalidArgumentException(sprintf('Expected an ApiResponse, got %s', get_class($response)));
     }
     $dataClass = $resource->getReturnType();
     if (!$dataClass) {
         throw new RuntimeException(sprintf('Return type is not defined for resource `%s` (%s), cannot hydrate', $resource->getName(), $resource->getPath()));
     }
     if (!class_exists($dataClass)) {
         throw new RuntimeException(sprintf('Cannot hydrate an instance of class `%s` as the class does not exist', $dataClass));
     }
     $reflection = new \ReflectionClass($dataClass);
     $this->reflObject = new \ReflectionObject($reflection->newInstance());
     if ($resource->getMethod() === ResourceDefinitionInterface::METHOD_CGET) {
         $result = [];
         foreach ($response->getData() as $row) {
             $result[] = $this->hydrateRow($reflection->newInstance(), $row);
         }
     } else {
         $result = $this->hydrateRow($reflection->newInstance(), $response->getData());
     }
     return $result;
 }