JsonParserTrait.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace Aws\Api\ErrorParser;
  3. use Aws\Api\Parser\PayloadParserTrait;
  4. use Aws\Api\StructureShape;
  5. use Psr\Http\Message\ResponseInterface;
  6. /**
  7. * Provides basic JSON error parsing functionality.
  8. */
  9. trait JsonParserTrait
  10. {
  11. use PayloadParserTrait;
  12. private function genericHandler(ResponseInterface $response)
  13. {
  14. $code = (string) $response->getStatusCode();
  15. if ($this->api
  16. && !is_null($this->api->getMetadata('awsQueryCompatible'))
  17. && $response->getHeaderLine('x-amzn-query-error')
  18. ) {
  19. $queryError = $response->getHeaderLine('x-amzn-query-error');
  20. $parts = explode(';', $queryError);
  21. if (isset($parts) && count($parts) == 2 && $parts[0] && $parts[1]) {
  22. $error_code = $parts[0];
  23. $error_type = $parts[1];
  24. }
  25. }
  26. if (!isset($error_type)) {
  27. $error_type = $code[0] == '4' ? 'client' : 'server';
  28. }
  29. return [
  30. 'request_id' => (string) $response->getHeaderLine('x-amzn-requestid'),
  31. 'code' => isset($error_code) ? $error_code : null,
  32. 'message' => null,
  33. 'type' => $error_type,
  34. 'parsed' => $this->parseJson($response->getBody(), $response)
  35. ];
  36. }
  37. protected function payload(
  38. ResponseInterface $response,
  39. StructureShape $member
  40. ) {
  41. $jsonBody = $this->parseJson($response->getBody(), $response);
  42. if ($jsonBody) {
  43. return $this->parser->parse($member, $jsonBody);
  44. }
  45. }
  46. }