RestXmlParser.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <?php
  2. namespace Aws\Api\Parser;
  3. use Aws\Api\StructureShape;
  4. use Aws\Api\Service;
  5. use Psr\Http\Message\ResponseInterface;
  6. use Psr\Http\Message\StreamInterface;
  7. /**
  8. * @internal Implements REST-XML parsing (e.g., S3, CloudFront, etc...)
  9. */
  10. class RestXmlParser extends AbstractRestParser
  11. {
  12. use PayloadParserTrait;
  13. /**
  14. * @param Service $api Service description
  15. * @param XmlParser $parser XML body parser
  16. */
  17. public function __construct(Service $api, XmlParser $parser = null)
  18. {
  19. parent::__construct($api);
  20. $this->parser = $parser ?: new XmlParser();
  21. }
  22. protected function payload(
  23. ResponseInterface $response,
  24. StructureShape $member,
  25. array &$result
  26. ) {
  27. $result += $this->parseMemberFromStream($response->getBody(), $member, $response);
  28. }
  29. public function parseMemberFromStream(
  30. StreamInterface $stream,
  31. StructureShape $member,
  32. $response
  33. ) {
  34. $xml = $this->parseXml($stream, $response);
  35. return $this->parser->parse($member, $xml);
  36. }
  37. }