/**
  * Create RequestExecutor object
  *
  * @return RequestExecutorInterface
  *
  * @api
  */
 public function createRequestExecutor()
 {
     foreach ($this->configuration->getPreferredEngines() as $engine) {
         switch ($engine) {
             case 'libevent':
                 if (extension_loaded('libevent')) {
                     return new LibEventRequestExecutor(new BaseStageFactory(), $this->configuration);
                 }
                 break;
             case 'native':
                 return new NativeRequestExecutor(new PipelineFactory(new BaseStageFactory()), $this->configuration);
         }
     }
     throw new \InvalidArgumentException('Provided configuration does not contain any supported RequestExecutor engine.');
 }