123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- namespace Aws\Api\Parser;
- use Aws\Api\DateTimeResult;
- use Aws\Api\Shape;
- use Psr\Http\Message\ResponseInterface;
- trait MetadataParserTrait
- {
- /**
- * Extract a single header from the response into the result.
- */
- protected function extractHeader(
- $name,
- Shape $shape,
- ResponseInterface $response,
- &$result
- ) {
- $value = $response->getHeaderLine($shape['locationName'] ?: $name);
- switch ($shape->getType()) {
- case 'float':
- case 'double':
- $value = (float) $value;
- break;
- case 'long':
- $value = (int) $value;
- break;
- case 'boolean':
- $value = filter_var($value, FILTER_VALIDATE_BOOLEAN);
- break;
- case 'blob':
- $value = base64_decode($value);
- break;
- case 'timestamp':
- try {
- $value = DateTimeResult::fromTimestamp(
- $value,
- !empty($shape['timestampFormat']) ? $shape['timestampFormat'] : null
- );
- break;
- } catch (\Exception $e) {
- // If the value cannot be parsed, then do not add it to the
- // output structure.
- return;
- }
- case 'string':
- if ($shape['jsonvalue']) {
- $value = $this->parseJson(base64_decode($value), $response);
- }
- break;
- }
- $result[$name] = $value;
- }
- /**
- * Extract a map of headers with an optional prefix from the response.
- */
- protected function extractHeaders(
- $name,
- Shape $shape,
- ResponseInterface $response,
- &$result
- ) {
- // Check if the headers are prefixed by a location name
- $result[$name] = [];
- $prefix = $shape['locationName'];
- $prefixLen = strlen($prefix);
- foreach ($response->getHeaders() as $k => $values) {
- if (!$prefixLen) {
- $result[$name][$k] = implode(', ', $values);
- } elseif (stripos($k, $prefix) === 0) {
- $result[$name][substr($k, $prefixLen)] = implode(', ', $values);
- }
- }
- }
- /**
- * Places the status code of the response into the result array.
- */
- protected function extractStatus(
- $name,
- ResponseInterface $response,
- array &$result
- ) {
- $result[$name] = (int) $response->getStatusCode();
- }
- }
|