summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/History.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2022-11-23 21:14:33 +0300
committerAndrew Dolgov <[email protected]>2022-11-23 21:14:33 +0300
commit0c8af4992cb0f7589dcafaad65ada12753c64594 (patch)
tree18e83d068c3e7dd2499331de977782b382279396 /vendor/aws/aws-sdk-php/src/History.php
initial
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/History.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/History.php161
1 files changed, 161 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/History.php b/vendor/aws/aws-sdk-php/src/History.php
new file mode 100644
index 0000000..9f8a3bf
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/History.php
@@ -0,0 +1,161 @@
+<?php
+namespace Aws;
+
+use Psr\Http\Message\RequestInterface;
+use Aws\Exception\AwsException;
+
+/**
+ * Represents a history container that is required when using the history
+ * middleware.
+ */
+class History implements \Countable, \IteratorAggregate
+{
+ private $maxEntries;
+ private $entries = array();
+
+ /**
+ * @param int $maxEntries Maximum number of entries to store.
+ */
+ public function __construct($maxEntries = 10)
+ {
+ $this->maxEntries = $maxEntries;
+ }
+
+ /**
+ * @return int
+ */
+ #[\ReturnTypeWillChange]
+ public function count()
+ {
+ return count($this->entries);
+ }
+
+ #[\ReturnTypeWillChange]
+ public function getIterator()
+ {
+ return new \ArrayIterator(array_values($this->entries));
+ }
+
+ /**
+ * Get the last finished command seen by the history container.
+ *
+ * @return CommandInterface
+ * @throws \LogicException if no commands have been seen.
+ */
+ public function getLastCommand()
+ {
+ if (!$this->entries) {
+ throw new \LogicException('No commands received');
+ }
+
+ return end($this->entries)['command'];
+ }
+
+ /**
+ * Get the last finished request seen by the history container.
+ *
+ * @return RequestInterface
+ * @throws \LogicException if no requests have been seen.
+ */
+ public function getLastRequest()
+ {
+ if (!$this->entries) {
+ throw new \LogicException('No requests received');
+ }
+
+ return end($this->entries)['request'];
+ }
+
+ /**
+ * Get the last received result or exception.
+ *
+ * @return ResultInterface|AwsException
+ * @throws \LogicException if no return values have been received.
+ */
+ public function getLastReturn()
+ {
+ if (!$this->entries) {
+ throw new \LogicException('No entries');
+ }
+
+ $last = end($this->entries);
+
+ if (isset($last['result'])) {
+ return $last['result'];
+ }
+
+ if (isset($last['exception'])) {
+ return $last['exception'];
+ }
+
+ throw new \LogicException('No return value for last entry.');
+ }
+
+ /**
+ * Initiate an entry being added to the history.
+ *
+ * @param CommandInterface $cmd Command be executed.
+ * @param RequestInterface $req Request being sent.
+ *
+ * @return string Returns the ticket used to finish the entry.
+ */
+ public function start(CommandInterface $cmd, RequestInterface $req)
+ {
+ $ticket = uniqid();
+ $this->entries[$ticket] = [
+ 'command' => $cmd,
+ 'request' => $req,
+ 'result' => null,
+ 'exception' => null,
+ ];
+
+ return $ticket;
+ }
+
+ /**
+ * Finish adding an entry to the history container.
+ *
+ * @param string $ticket Ticket returned from the start call.
+ * @param mixed $result The result (an exception or AwsResult).
+ */
+ public function finish($ticket, $result)
+ {
+ if (!isset($this->entries[$ticket])) {
+ throw new \InvalidArgumentException('Invalid history ticket');
+ }
+
+ if (isset($this->entries[$ticket]['result'])
+ || isset($this->entries[$ticket]['exception'])
+ ) {
+ throw new \LogicException('History entry is already finished');
+ }
+
+ if ($result instanceof \Exception) {
+ $this->entries[$ticket]['exception'] = $result;
+ } else {
+ $this->entries[$ticket]['result'] = $result;
+ }
+
+ if (count($this->entries) >= $this->maxEntries) {
+ $this->entries = array_slice($this->entries, -$this->maxEntries, null, true);
+ }
+ }
+
+ /**
+ * Flush the history
+ */
+ public function clear()
+ {
+ $this->entries = [];
+ }
+
+ /**
+ * Converts the history to an array.
+ *
+ * @return array
+ */
+ public function toArray()
+ {
+ return array_values($this->entries);
+ }
+}