<?php
/**
* Elasticsearch PHP client
*
* @link https://github.com/elastic/elasticsearch-php/
* @copyright Copyright (c) Elasticsearch B.V (https://www.elastic.co)
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/lgpl-2.1.html GNU Lesser General Public License, Version 2.1
*
* Licensed to Elasticsearch B.V under one or more agreements.
* Elasticsearch B.V licenses this file to you under the Apache 2.0 License or
* the GNU Lesser General Public License, Version 2.1, at your option.
* See the LICENSE file in the project root for more information.
*/
declare(strict_types = 1);
namespace Elasticsearch\Namespaces;
use Elasticsearch\Endpoints\AbstractEndpoint;
use Elasticsearch\Transport;
abstract class AbstractNamespace
{
/**
* @var \Elasticsearch\Transport
*/
protected $transport;
/**
* @var callable
*/
protected $endpoints;
public function __construct(Transport $transport, callable $endpoints)
{
$this->transport = $transport;
$this->endpoints = $endpoints;
}
/**
* @return null|mixed
*/
public function extractArgument(array &$params, string $arg)
{
if (array_key_exists($arg, $params) === true) {
$val = $params[$arg];
unset($params[$arg]);
return $val;
} else {
return null;
}
}
protected function performRequest(AbstractEndpoint $endpoint)
{
$response = $this->transport->performRequest(
$endpoint->getMethod(),
$endpoint->getURI(),
$endpoint->getParams(),
$endpoint->getBody(),
$endpoint->getOptions()
);
return $this->transport->resultOrFuture($response, $endpoint->getOptions());
}
}