Mercurial > hg > isophonics-drupal-site
diff vendor/zendframework/zend-diactoros/src/Response/ArraySerializer.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | c2387f117808 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/zendframework/zend-diactoros/src/Response/ArraySerializer.php Wed Nov 29 16:09:58 2017 +0000 @@ -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); + } +}