<?php 
namespace Aws\S3; 
 
use Aws\Api\Parser\AbstractParser; 
use Aws\CommandInterface; 
use Psr\Http\Message\ResponseInterface; 
 
/** 
 * @internal Decorates a parser for the S3 service to correctly handle the 
 *           GetBucketLocation operation. 
 */ 
class GetBucketLocationParser extends AbstractParser 
{ 
    /** @var callable */ 
    private $parser; 
 
    /** 
     * @param callable $parser Parser to wrap. 
     */ 
    public function __construct(callable $parser) 
    { 
        $this->parser = $parser; 
    } 
 
    public function __invoke( 
        CommandInterface $command, 
        ResponseInterface $response 
    ) { 
        $fn = $this->parser; 
        $result = $fn($command, $response); 
 
        if ($command->getName() === 'GetBucketLocation') { 
            $location = 'us-east-1'; 
            if (preg_match('/>(.+?)<\/LocationConstraint>/', $response->getBody(), $matches)) { 
                $location = $matches[1] === 'EU' ? 'eu-west-1' : $matches[1]; 
            } 
            $result['LocationConstraint'] = $location; 
        } 
 
        return $result; 
    } 
} 
 
 |