annotate 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
rev   line source
Chris@0 1 <?php
Chris@0 2 /**
Chris@0 3 * Zend Framework (http://framework.zend.com/)
Chris@0 4 *
Chris@0 5 * @see http://github.com/zendframework/zend-diactoros for the canonical source repository
Chris@0 6 * @copyright Copyright (c) 2015-2016 Zend Technologies USA Inc. (http://www.zend.com)
Chris@0 7 * @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
Chris@0 8 */
Chris@0 9
Chris@0 10 namespace Zend\Diactoros;
Chris@0 11
Chris@0 12 use InvalidArgumentException;
Chris@0 13 use RuntimeException;
Chris@0 14 use Psr\Http\Message\StreamInterface;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * Implementation of PSR HTTP streams
Chris@0 18 */
Chris@0 19 class CallbackStream implements StreamInterface
Chris@0 20 {
Chris@0 21 /**
Chris@0 22 * @var callable|null
Chris@0 23 */
Chris@0 24 protected $callback;
Chris@0 25
Chris@0 26 /**
Chris@0 27 * @param callable $callback
Chris@0 28 * @throws InvalidArgumentException
Chris@0 29 */
Chris@0 30 public function __construct(callable $callback)
Chris@0 31 {
Chris@0 32 $this->attach($callback);
Chris@0 33 }
Chris@0 34
Chris@0 35 /**
Chris@0 36 * {@inheritdoc}
Chris@0 37 */
Chris@0 38 public function __toString()
Chris@0 39 {
Chris@0 40 return $this->getContents();
Chris@0 41 }
Chris@0 42
Chris@0 43 /**
Chris@0 44 * {@inheritdoc}
Chris@0 45 */
Chris@0 46 public function close()
Chris@0 47 {
Chris@0 48 $this->callback = null;
Chris@0 49 }
Chris@0 50
Chris@0 51 /**
Chris@0 52 * {@inheritdoc}
Chris@0 53 */
Chris@0 54 public function detach()
Chris@0 55 {
Chris@0 56 $callback = $this->callback;
Chris@0 57 $this->callback = null;
Chris@0 58 return $callback;
Chris@0 59 }
Chris@0 60
Chris@0 61 /**
Chris@0 62 * Attach a new callback to the instance.
Chris@0 63 *
Chris@0 64 * @param callable $callback
Chris@0 65 * @throws InvalidArgumentException for callable callback
Chris@0 66 */
Chris@0 67 public function attach(callable $callback)
Chris@0 68 {
Chris@0 69 $this->callback = $callback;
Chris@0 70 }
Chris@0 71
Chris@0 72 /**
Chris@0 73 * {@inheritdoc}
Chris@0 74 */
Chris@0 75 public function getSize()
Chris@0 76 {
Chris@0 77 }
Chris@0 78
Chris@0 79 /**
Chris@0 80 * {@inheritdoc}
Chris@0 81 */
Chris@0 82 public function tell()
Chris@0 83 {
Chris@0 84 throw new RuntimeException('Callback streams cannot tell position');
Chris@0 85 }
Chris@0 86
Chris@0 87 /**
Chris@0 88 * {@inheritdoc}
Chris@0 89 */
Chris@0 90 public function eof()
Chris@0 91 {
Chris@0 92 return empty($this->callback);
Chris@0 93 }
Chris@0 94
Chris@0 95 /**
Chris@0 96 * {@inheritdoc}
Chris@0 97 */
Chris@0 98 public function isSeekable()
Chris@0 99 {
Chris@0 100 return false;
Chris@0 101 }
Chris@0 102
Chris@0 103 /**
Chris@0 104 * {@inheritdoc}
Chris@0 105 */
Chris@0 106 public function seek($offset, $whence = SEEK_SET)
Chris@0 107 {
Chris@0 108 throw new RuntimeException('Callback streams cannot seek position');
Chris@0 109 }
Chris@0 110
Chris@0 111 /**
Chris@0 112 * {@inheritdoc}
Chris@0 113 */
Chris@0 114 public function rewind()
Chris@0 115 {
Chris@0 116 throw new RuntimeException('Callback streams cannot rewind position');
Chris@0 117 }
Chris@0 118
Chris@0 119 /**
Chris@0 120 * {@inheritdoc}
Chris@0 121 */
Chris@0 122 public function isWritable()
Chris@0 123 {
Chris@0 124 return false;
Chris@0 125 }
Chris@0 126
Chris@0 127 /**
Chris@0 128 * {@inheritdoc}
Chris@0 129 */
Chris@0 130 public function write($string)
Chris@0 131 {
Chris@0 132 throw new RuntimeException('Callback streams cannot write');
Chris@0 133 }
Chris@0 134
Chris@0 135 /**
Chris@0 136 * {@inheritdoc}
Chris@0 137 */
Chris@0 138 public function isReadable()
Chris@0 139 {
Chris@0 140 return false;
Chris@0 141 }
Chris@0 142
Chris@0 143 /**
Chris@0 144 * {@inheritdoc}
Chris@0 145 */
Chris@0 146 public function read($length)
Chris@0 147 {
Chris@0 148 throw new RuntimeException('Callback streams cannot read');
Chris@0 149 }
Chris@0 150
Chris@0 151 /**
Chris@0 152 * {@inheritdoc}
Chris@0 153 */
Chris@0 154 public function getContents()
Chris@0 155 {
Chris@0 156 $callback = $this->detach();
Chris@0 157 return $callback ? $callback() : '';
Chris@0 158 }
Chris@0 159
Chris@0 160 /**
Chris@0 161 * {@inheritdoc}
Chris@0 162 */
Chris@0 163 public function getMetadata($key = null)
Chris@0 164 {
Chris@0 165 $metadata = [
Chris@0 166 'eof' => $this->eof(),
Chris@0 167 'stream_type' => 'callback',
Chris@0 168 'seekable' => false
Chris@0 169 ];
Chris@0 170
Chris@0 171 if (null === $key) {
Chris@0 172 return $metadata;
Chris@0 173 }
Chris@0 174
Chris@0 175 if (! array_key_exists($key, $metadata)) {
Chris@0 176 return null;
Chris@0 177 }
Chris@0 178
Chris@0 179 return $metadata[$key];
Chris@0 180 }
Chris@0 181 }