ListBucketsOutput.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace AsyncAws\S3\Result;
  3. use AsyncAws\Core\Response;
  4. use AsyncAws\Core\Result;
  5. use AsyncAws\S3\ValueObject\Bucket;
  6. use AsyncAws\S3\ValueObject\Owner;
  7. /**
  8. * @implements \IteratorAggregate<Bucket>
  9. */
  10. class ListBucketsOutput extends Result implements \IteratorAggregate
  11. {
  12. /**
  13. * The list of buckets owned by the requester.
  14. */
  15. private $buckets;
  16. /**
  17. * The owner of the buckets listed.
  18. */
  19. private $owner;
  20. /**
  21. * @return iterable<Bucket>
  22. */
  23. public function getBuckets(): iterable
  24. {
  25. $this->initialize();
  26. return $this->buckets;
  27. }
  28. /**
  29. * Iterates over Buckets.
  30. *
  31. * @return \Traversable<Bucket>
  32. */
  33. public function getIterator(): \Traversable
  34. {
  35. yield from $this->getBuckets();
  36. }
  37. public function getOwner(): ?Owner
  38. {
  39. $this->initialize();
  40. return $this->owner;
  41. }
  42. protected function populateResult(Response $response): void
  43. {
  44. $data = new \SimpleXMLElement($response->getContent());
  45. $this->buckets = !$data->Buckets ? [] : $this->populateResultBuckets($data->Buckets);
  46. $this->owner = !$data->Owner ? null : new Owner([
  47. 'DisplayName' => ($v = $data->Owner->DisplayName) ? (string) $v : null,
  48. 'ID' => ($v = $data->Owner->ID) ? (string) $v : null,
  49. ]);
  50. }
  51. /**
  52. * @return Bucket[]
  53. */
  54. private function populateResultBuckets(\SimpleXMLElement $xml): array
  55. {
  56. $items = [];
  57. foreach ($xml->Bucket as $item) {
  58. $items[] = new Bucket([
  59. 'Name' => ($v = $item->Name) ? (string) $v : null,
  60. 'CreationDate' => ($v = $item->CreationDate) ? new \DateTimeImmutable((string) $v) : null,
  61. ]);
  62. }
  63. return $items;
  64. }
  65. }