| 
<?phpnamespace Aws\Sqs;
 
 use Aws\AwsClient;
 use Aws\CommandInterface;
 use Aws\Sqs\Exception\SqsException;
 use GuzzleHttp\Psr7\Uri;
 use Psr\Http\Message\RequestInterface;
 
 /**
 * Client used to interact Amazon Simple Queue Service (Amazon SQS)
 *
 * @method \Aws\Result addPermission(array $args = [])
 * @method \GuzzleHttp\Promise\Promise addPermissionAsync(array $args = [])
 * @method \Aws\Result changeMessageVisibility(array $args = [])
 * @method \GuzzleHttp\Promise\Promise changeMessageVisibilityAsync(array $args = [])
 * @method \Aws\Result changeMessageVisibilityBatch(array $args = [])
 * @method \GuzzleHttp\Promise\Promise changeMessageVisibilityBatchAsync(array $args = [])
 * @method \Aws\Result createQueue(array $args = [])
 * @method \GuzzleHttp\Promise\Promise createQueueAsync(array $args = [])
 * @method \Aws\Result deleteMessage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteMessageAsync(array $args = [])
 * @method \Aws\Result deleteMessageBatch(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteMessageBatchAsync(array $args = [])
 * @method \Aws\Result deleteQueue(array $args = [])
 * @method \GuzzleHttp\Promise\Promise deleteQueueAsync(array $args = [])
 * @method \Aws\Result getQueueAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getQueueAttributesAsync(array $args = [])
 * @method \Aws\Result getQueueUrl(array $args = [])
 * @method \GuzzleHttp\Promise\Promise getQueueUrlAsync(array $args = [])
 * @method \Aws\Result listDeadLetterSourceQueues(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listDeadLetterSourceQueuesAsync(array $args = [])
 * @method \Aws\Result listQueues(array $args = [])
 * @method \GuzzleHttp\Promise\Promise listQueuesAsync(array $args = [])
 * @method \Aws\Result purgeQueue(array $args = [])
 * @method \GuzzleHttp\Promise\Promise purgeQueueAsync(array $args = [])
 * @method \Aws\Result receiveMessage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise receiveMessageAsync(array $args = [])
 * @method \Aws\Result removePermission(array $args = [])
 * @method \GuzzleHttp\Promise\Promise removePermissionAsync(array $args = [])
 * @method \Aws\Result sendMessage(array $args = [])
 * @method \GuzzleHttp\Promise\Promise sendMessageAsync(array $args = [])
 * @method \Aws\Result sendMessageBatch(array $args = [])
 * @method \GuzzleHttp\Promise\Promise sendMessageBatchAsync(array $args = [])
 * @method \Aws\Result setQueueAttributes(array $args = [])
 * @method \GuzzleHttp\Promise\Promise setQueueAttributesAsync(array $args = [])
 */
 class SqsClient extends AwsClient
 {
 public function __construct(array $config)
 {
 parent::__construct($config);
 $list = $this->getHandlerList();
 $list->appendBuild($this->queueUrl(), 'sqs.queue_url');
 $list->appendSign($this->validateMd5(), 'sqs.md5');
 }
 
 /**
 * Converts a queue URL into a queue ARN.
 *
 * @param string $queueUrl The queue URL to perform the action on.
 *                         Retrieved when the queue is first created.
 *
 * @return string An ARN representation of the queue URL.
 */
 public function getQueueArn($queueUrl)
 {
 return strtr($queueUrl, array(
 'http://'        => 'arn:aws:',
 'https://'       => 'arn:aws:',
 '.amazonaws.com' => '',
 '/'              => ':',
 '.'              => ':',
 ));
 }
 
 /**
 * Moves the URI of the queue to the URI in the input parameter.
 *
 * @return callable
 */
 private function queueUrl()
 {
 return static function (callable $handler) {
 return function (
 CommandInterface $c,
 RequestInterface $r = null
 ) use ($handler) {
 if ($c->hasParam('QueueUrl')) {
 $uri = Uri::resolve($r->getUri(), $c['QueueUrl']);
 $r = $r->withUri($uri);
 }
 return $handler($c, $r);
 };
 };
 }
 
 /**
 * Validates ReceiveMessage body MD5s
 *
 * @return callable
 */
 private function validateMd5()
 {
 return static function (callable $handler) {
 return function (
 CommandInterface $c,
 RequestInterface $r = null
 ) use ($handler) {
 if ($c->getName() !== 'ReceiveMessage') {
 return $handler($c, $r);
 }
 
 return $handler($c, $r)
 ->then(
 function ($result) use ($c, $r) {
 foreach ((array) $result['Messages'] as $msg) {
 if (isset($msg['MD5OfBody'])
 && md5($msg['Body']) !== $msg['MD5OfBody']
 ) {
 throw new SqsException(
 sprintf(
 'MD5 mismatch. Expected %s, found %s',
 $msg['MD5OfBody'],
 md5($msg['Body'])
 ),
 $c,
 [
 'code' => 'ClientChecksumMismatch',
 'request' => $r
 ]
 );
 }
 }
 return $result;
 }
 );
 };
 };
 }
 }
 
 |