diff options
author | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
commit | 0c8af4992cb0f7589dcafaad65ada12753c64594 (patch) | |
tree | 18e83d068c3e7dd2499331de977782b382279396 /vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php |
initial
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php b/vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php new file mode 100644 index 0000000..18d3a17 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/S3/AmbiguousSuccessParser.php @@ -0,0 +1,79 @@ +<?php +namespace Aws\S3; + +use Aws\Api\Parser\AbstractParser; +use Aws\Api\Parser\Exception\ParserException; +use Aws\Api\StructureShape; +use Aws\CommandInterface; +use Aws\Exception\AwsException; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\StreamInterface; + +/** + * Converts errors returned with a status code of 200 to a retryable error type. + * + * @internal + */ +class AmbiguousSuccessParser extends AbstractParser +{ + private static $ambiguousSuccesses = [ + 'UploadPart' => true, + 'UploadPartCopy' => true, + 'CopyObject' => true, + 'CompleteMultipartUpload' => true, + ]; + + /** @var callable */ + private $errorParser; + /** @var string */ + private $exceptionClass; + + public function __construct( + callable $parser, + callable $errorParser, + $exceptionClass = AwsException::class + ) { + $this->parser = $parser; + $this->errorParser = $errorParser; + $this->exceptionClass = $exceptionClass; + } + + public function __invoke( + CommandInterface $command, + ResponseInterface $response + ) { + if (200 === $response->getStatusCode() + && isset(self::$ambiguousSuccesses[$command->getName()]) + ) { + $errorParser = $this->errorParser; + try { + $parsed = $errorParser($response); + } catch (ParserException $e) { + $parsed = [ + 'code' => 'ConnectionError', + 'message' => "An error connecting to the service occurred" + . " while performing the " . $command->getName() + . " operation." + ]; + } + if (isset($parsed['code']) && isset($parsed['message'])) { + throw new $this->exceptionClass( + $parsed['message'], + $command, + ['connection_error' => true] + ); + } + } + + $fn = $this->parser; + return $fn($command, $response); + } + + public function parseMemberFromStream( + StreamInterface $stream, + StructureShape $member, + $response + ) { + return $this->parser->parseMemberFromStream($stream, $member, $response); + } +} |