Mercurial > hg > cmmr2012-drupal-site
diff vendor/zendframework/zend-diactoros/src/CallbackStream.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | 5311817fb629 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/zendframework/zend-diactoros/src/CallbackStream.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,181 @@ +<?php +/** + * Zend Framework (http://framework.zend.com/) + * + * @see http://github.com/zendframework/zend-diactoros for the canonical source repository + * @copyright Copyright (c) 2015-2016 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; + +use InvalidArgumentException; +use RuntimeException; +use Psr\Http\Message\StreamInterface; + +/** + * Implementation of PSR HTTP streams + */ +class CallbackStream implements StreamInterface +{ + /** + * @var callable|null + */ + protected $callback; + + /** + * @param callable $callback + * @throws InvalidArgumentException + */ + public function __construct(callable $callback) + { + $this->attach($callback); + } + + /** + * {@inheritdoc} + */ + public function __toString() + { + return $this->getContents(); + } + + /** + * {@inheritdoc} + */ + public function close() + { + $this->callback = null; + } + + /** + * {@inheritdoc} + */ + public function detach() + { + $callback = $this->callback; + $this->callback = null; + return $callback; + } + + /** + * Attach a new callback to the instance. + * + * @param callable $callback + * @throws InvalidArgumentException for callable callback + */ + public function attach(callable $callback) + { + $this->callback = $callback; + } + + /** + * {@inheritdoc} + */ + public function getSize() + { + } + + /** + * {@inheritdoc} + */ + public function tell() + { + throw new RuntimeException('Callback streams cannot tell position'); + } + + /** + * {@inheritdoc} + */ + public function eof() + { + return empty($this->callback); + } + + /** + * {@inheritdoc} + */ + public function isSeekable() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) + { + throw new RuntimeException('Callback streams cannot seek position'); + } + + /** + * {@inheritdoc} + */ + public function rewind() + { + throw new RuntimeException('Callback streams cannot rewind position'); + } + + /** + * {@inheritdoc} + */ + public function isWritable() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function write($string) + { + throw new RuntimeException('Callback streams cannot write'); + } + + /** + * {@inheritdoc} + */ + public function isReadable() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function read($length) + { + throw new RuntimeException('Callback streams cannot read'); + } + + /** + * {@inheritdoc} + */ + public function getContents() + { + $callback = $this->detach(); + return $callback ? $callback() : ''; + } + + /** + * {@inheritdoc} + */ + public function getMetadata($key = null) + { + $metadata = [ + 'eof' => $this->eof(), + 'stream_type' => 'callback', + 'seekable' => false + ]; + + if (null === $key) { + return $metadata; + } + + if (! array_key_exists($key, $metadata)) { + return null; + } + + return $metadata[$key]; + } +}