123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- <?php
- namespace Aws\Api;
- class Service extends AbstractModel
- {
-
- private $apiProvider;
-
- private $serviceName;
-
- private $apiVersion;
-
- private $clientContextParams = [];
-
- private $operations = [];
-
- private $paginators = null;
-
- private $waiters = null;
-
- private $modifiedModel = false;
-
- public function __construct(array $definition, callable $provider)
- {
- static $defaults = [
- 'operations' => [],
- 'shapes' => [],
- 'metadata' => [],
- 'clientContextParams' => []
- ], $defaultMeta = [
- 'apiVersion' => null,
- 'serviceFullName' => null,
- 'serviceId' => null,
- 'endpointPrefix' => null,
- 'signingName' => null,
- 'signatureVersion' => null,
- 'protocol' => null,
- 'uid' => null
- ];
- $definition += $defaults;
- $definition['metadata'] += $defaultMeta;
- $this->definition = $definition;
- $this->apiProvider = $provider;
- parent::__construct($definition, new ShapeMap($definition['shapes']));
- if (isset($definition['metadata']['serviceIdentifier'])) {
- $this->serviceName = $this->getServiceName();
- } else {
- $this->serviceName = $this->getEndpointPrefix();
- }
- $this->apiVersion = $this->getApiVersion();
- if (isset($definition['clientContextParams'])) {
- $this->clientContextParams = $definition['clientContextParams'];
- }
- }
-
- public static function createSerializer(Service $api, $endpoint)
- {
- static $mapping = [
- 'json' => Serializer\JsonRpcSerializer::class,
- 'query' => Serializer\QuerySerializer::class,
- 'rest-json' => Serializer\RestJsonSerializer::class,
- 'rest-xml' => Serializer\RestXmlSerializer::class
- ];
- $proto = $api->getProtocol();
- if (isset($mapping[$proto])) {
- return new $mapping[$proto]($api, $endpoint);
- }
- if ($proto == 'ec2') {
- return new Serializer\QuerySerializer($api, $endpoint, new Serializer\Ec2ParamBuilder());
- }
- throw new \UnexpectedValueException(
- 'Unknown protocol: ' . $api->getProtocol()
- );
- }
-
- public static function createErrorParser($protocol, Service $api = null)
- {
- static $mapping = [
- 'json' => ErrorParser\JsonRpcErrorParser::class,
- 'query' => ErrorParser\XmlErrorParser::class,
- 'rest-json' => ErrorParser\RestJsonErrorParser::class,
- 'rest-xml' => ErrorParser\XmlErrorParser::class,
- 'ec2' => ErrorParser\XmlErrorParser::class
- ];
- if (isset($mapping[$protocol])) {
- return new $mapping[$protocol]($api);
- }
- throw new \UnexpectedValueException("Unknown protocol: $protocol");
- }
-
- public static function createParser(Service $api)
- {
- static $mapping = [
- 'json' => Parser\JsonRpcParser::class,
- 'query' => Parser\QueryParser::class,
- 'rest-json' => Parser\RestJsonParser::class,
- 'rest-xml' => Parser\RestXmlParser::class
- ];
- $proto = $api->getProtocol();
- if (isset($mapping[$proto])) {
- return new $mapping[$proto]($api);
- }
- if ($proto == 'ec2') {
- return new Parser\QueryParser($api, null, false);
- }
- throw new \UnexpectedValueException(
- 'Unknown protocol: ' . $api->getProtocol()
- );
- }
-
- public function getServiceFullName()
- {
- return $this->definition['metadata']['serviceFullName'];
- }
-
- public function getServiceId()
- {
- return $this->definition['metadata']['serviceId'];
- }
-
- public function getApiVersion()
- {
- return $this->definition['metadata']['apiVersion'];
- }
-
- public function getEndpointPrefix()
- {
- return $this->definition['metadata']['endpointPrefix'];
- }
-
- public function getSigningName()
- {
- return $this->definition['metadata']['signingName']
- ?: $this->definition['metadata']['endpointPrefix'];
- }
-
- public function getServiceName()
- {
- return $this->definition['metadata']['serviceIdentifier'];
- }
-
- public function getSignatureVersion()
- {
- return $this->definition['metadata']['signatureVersion'] ?: 'v4';
- }
-
- public function getProtocol()
- {
- return $this->definition['metadata']['protocol'];
- }
-
- public function getUid()
- {
- return $this->definition['metadata']['uid'];
- }
-
- public function hasOperation($name)
- {
- return isset($this['operations'][$name]);
- }
-
- public function getOperation($name)
- {
- if (!isset($this->operations[$name])) {
- if (!isset($this->definition['operations'][$name])) {
- throw new \InvalidArgumentException("Unknown operation: $name");
- }
- $this->operations[$name] = new Operation(
- $this->definition['operations'][$name],
- $this->shapeMap
- );
- } else if ($this->modifiedModel) {
- $this->operations[$name] = new Operation(
- $this->definition['operations'][$name],
- $this->shapeMap
- );
- }
- return $this->operations[$name];
- }
-
- public function getOperations()
- {
- $result = [];
- foreach ($this->definition['operations'] as $name => $definition) {
- $result[$name] = $this->getOperation($name);
- }
- return $result;
- }
-
- public function getErrorShapes()
- {
- $result = [];
- foreach ($this->definition['shapes'] as $name => $definition) {
- if (!empty($definition['exception'])) {
- $definition['name'] = $name;
- $result[] = new StructureShape($definition, $this->getShapeMap());
- }
- }
- return $result;
- }
-
- public function getMetadata($key = null)
- {
- if (!$key) {
- return $this['metadata'];
- }
- if (isset($this->definition['metadata'][$key])) {
- return $this->definition['metadata'][$key];
- }
- return null;
- }
-
- public function getPaginators()
- {
- if (!isset($this->paginators)) {
- $res = call_user_func(
- $this->apiProvider,
- 'paginator',
- $this->serviceName,
- $this->apiVersion
- );
- $this->paginators = isset($res['pagination'])
- ? $res['pagination']
- : [];
- }
- return $this->paginators;
- }
-
- public function hasPaginator($name)
- {
- return isset($this->getPaginators()[$name]);
- }
-
- public function getPaginatorConfig($name)
- {
- static $defaults = [
- 'input_token' => null,
- 'output_token' => null,
- 'limit_key' => null,
- 'result_key' => null,
- 'more_results' => null,
- ];
- if ($this->hasPaginator($name)) {
- return $this->paginators[$name] + $defaults;
- }
- throw new \UnexpectedValueException("There is no {$name} "
- . "paginator defined for the {$this->serviceName} service.");
- }
-
- public function getWaiters()
- {
- if (!isset($this->waiters)) {
- $res = call_user_func(
- $this->apiProvider,
- 'waiter',
- $this->serviceName,
- $this->apiVersion
- );
- $this->waiters = isset($res['waiters'])
- ? $res['waiters']
- : [];
- }
- return $this->waiters;
- }
-
- public function hasWaiter($name)
- {
- return isset($this->getWaiters()[$name]);
- }
-
- public function getWaiterConfig($name)
- {
-
- if ($this->hasWaiter($name)) {
- return $this->waiters[$name];
- }
- throw new \UnexpectedValueException("There is no {$name} waiter "
- . "defined for the {$this->serviceName} service.");
- }
-
- public function getShapeMap()
- {
- return $this->shapeMap;
- }
-
- public function getClientContextParams()
- {
- return $this->clientContextParams;
- }
-
- public function getProvider()
- {
- return $this->apiProvider;
- }
-
- public function getDefinition()
- {
- return $this->definition;
- }
-
- public function setDefinition($definition)
- {
- $this->definition = $definition;
- $this->modifiedModel = true;
- }
-
- public function isModifiedModel()
- {
- return $this->modifiedModel;
- }
- }
|