Version 1
[yaffs-website] / vendor / zendframework / zend-diactoros / src / Response / ArraySerializer.php
diff --git a/vendor/zendframework/zend-diactoros/src/Response/ArraySerializer.php b/vendor/zendframework/zend-diactoros/src/Response/ArraySerializer.php
new file mode 100644 (file)
index 0000000..be4ab3e
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+/**
+ * @see       http://github.com/zendframework/zend-diactoros for the canonical source repository
+ * @copyright Copyright (c) 2017 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
+ */
+
+namespace Zend\Diactoros\Response;
+
+use Psr\Http\Message\ResponseInterface;
+use UnexpectedValueException;
+use Zend\Diactoros\Response;
+use Zend\Diactoros\Stream;
+
+/**
+ * Serialize or deserialize response messages to/from arrays.
+ *
+ * This class provides functionality for serializing a ResponseInterface instance
+ * to an array, as well as the reverse operation of creating a Response instance
+ * from an array representing a message.
+ */
+final class ArraySerializer
+{
+    /**
+     * Serialize a response message to an array.
+     *
+     * @param ResponseInterface $response
+     * @return array
+     */
+    public static function toArray(ResponseInterface $response)
+    {
+        return [
+            'status_code'      => $response->getStatusCode(),
+            'reason_phrase'    => $response->getReasonPhrase(),
+            'protocol_version' => $response->getProtocolVersion(),
+            'headers'          => $response->getHeaders(),
+            'body'             => (string) $response->getBody(),
+        ];
+    }
+
+    /**
+     * Deserialize a response array to a response instance.
+     *
+     * @param array $serializedResponse
+     * @return Response
+     * @throws UnexpectedValueException when cannot deserialize response
+     */
+    public static function fromArray(array $serializedResponse)
+    {
+        try {
+            $body = new Stream('php://memory', 'wb+');
+            $body->write(self::getValueFromKey($serializedResponse, 'body'));
+
+            $statusCode      = self::getValueFromKey($serializedResponse, 'status_code');
+            $headers         = self::getValueFromKey($serializedResponse, 'headers');
+            $protocolVersion = self::getValueFromKey($serializedResponse, 'protocol_version');
+            $reasonPhrase    = self::getValueFromKey($serializedResponse, 'reason_phrase');
+
+            return (new Response($body, $statusCode, $headers))
+                ->withProtocolVersion($protocolVersion)
+                ->withStatus($statusCode, $reasonPhrase);
+        } catch (\Exception $exception) {
+            throw new UnexpectedValueException('Cannot deserialize response', null, $exception);
+        }
+    }
+
+    /**
+     * @param array $data
+     * @param string $key
+     * @param string $message
+     * @return mixed
+     * @throws UnexpectedValueException
+     */
+    private static function getValueFromKey(array $data, $key, $message = null)
+    {
+        if (isset($data[$key])) {
+            return $data[$key];
+        }
+        if ($message === null) {
+            $message = sprintf('Missing "%s" key in serialized request', $key);
+        }
+        throw new UnexpectedValueException($message);
+    }
+}