RestJsonParser.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace Aws\Api\Parser;
  3. use Aws\Api\Service;
  4. use Aws\Api\StructureShape;
  5. use Psr\Http\Message\ResponseInterface;
  6. use Psr\Http\Message\StreamInterface;
  7. /**
  8. * @internal Implements REST-JSON parsing (e.g., Glacier, Elastic Transcoder)
  9. */
  10. class RestJsonParser extends AbstractRestParser
  11. {
  12. use PayloadParserTrait;
  13. /**
  14. * @param Service $api Service description
  15. * @param JsonParser $parser JSON body builder
  16. */
  17. public function __construct(Service $api, JsonParser $parser = null)
  18. {
  19. parent::__construct($api);
  20. $this->parser = $parser ?: new JsonParser();
  21. }
  22. protected function payload(
  23. ResponseInterface $response,
  24. StructureShape $member,
  25. array &$result
  26. ) {
  27. $jsonBody = $this->parseJson($response->getBody(), $response);
  28. if ($jsonBody) {
  29. $result += $this->parser->parse($member, $jsonBody);
  30. }
  31. }
  32. public function parseMemberFromStream(
  33. StreamInterface $stream,
  34. StructureShape $member,
  35. $response
  36. ) {
  37. $jsonBody = $this->parseJson($stream, $response);
  38. if ($jsonBody) {
  39. return $this->parser->parse($member, $jsonBody);
  40. }
  41. return [];
  42. }
  43. }