PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.4
4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / vendor / guzzlehttp / psr7 / src / FnStream.php
surecart / vendor / guzzlehttp / psr7 / src Last commit date
Exception 1 year ago AppendStream.php 1 year ago BufferStream.php 1 year ago CachingStream.php 1 year ago DroppingStream.php 1 year ago FnStream.php 1 year ago Header.php 1 year ago HttpFactory.php 1 year ago InflateStream.php 1 year ago LazyOpenStream.php 1 year ago LimitStream.php 1 year ago Message.php 1 year ago MessageTrait.php 1 year ago MimeType.php 1 year ago MultipartStream.php 1 year ago NoSeekStream.php 1 year ago PumpStream.php 1 year ago Query.php 1 year ago Request.php 1 year ago Response.php 1 year ago Rfc7230.php 1 year ago ServerRequest.php 1 year ago Stream.php 1 year ago StreamDecoratorTrait.php 1 year ago StreamWrapper.php 1 year ago UploadedFile.php 1 year ago Uri.php 1 year ago UriComparator.php 1 year ago UriNormalizer.php 1 year ago UriResolver.php 1 year ago Utils.php 1 year ago
FnStream.php
181 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace SureCartVendors\GuzzleHttp\Psr7;
6
7 use SureCartVendors\Psr\Http\Message\StreamInterface;
8
9 /**
10 * Compose stream implementations based on a hash of functions.
11 *
12 * Allows for easy testing and extension of a provided stream without needing
13 * to create a concrete class for a simple extension point.
14 */
15 #[\AllowDynamicProperties]
16 final class FnStream implements StreamInterface
17 {
18 private const SLOTS = [
19 '__toString', 'close', 'detach', 'rewind',
20 'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
21 'isReadable', 'read', 'getContents', 'getMetadata',
22 ];
23
24 /** @var array<string, callable> */
25 private $methods;
26
27 /**
28 * @param array<string, callable> $methods Hash of method name to a callable.
29 */
30 public function __construct(array $methods)
31 {
32 $this->methods = $methods;
33
34 // Create the functions on the class
35 foreach ($methods as $name => $fn) {
36 $this->{'_fn_'.$name} = $fn;
37 }
38 }
39
40 /**
41 * Lazily determine which methods are not implemented.
42 *
43 * @throws \BadMethodCallException
44 */
45 public function __get(string $name): void
46 {
47 throw new \BadMethodCallException(str_replace('_fn_', '', $name)
48 .'() is not implemented in the FnStream');
49 }
50
51 /**
52 * The close method is called on the underlying stream only if possible.
53 */
54 public function __destruct()
55 {
56 if (isset($this->_fn_close)) {
57 ($this->_fn_close)();
58 }
59 }
60
61 /**
62 * An unserialize would allow the __destruct to run when the unserialized value goes out of scope.
63 *
64 * @throws \LogicException
65 */
66 public function __wakeup(): void
67 {
68 throw new \LogicException('FnStream should never be unserialized');
69 }
70
71 /**
72 * Adds custom functionality to an underlying stream by intercepting
73 * specific method calls.
74 *
75 * @param StreamInterface $stream Stream to decorate
76 * @param array<string, callable> $methods Hash of method name to a closure
77 *
78 * @return FnStream
79 */
80 public static function decorate(StreamInterface $stream, array $methods)
81 {
82 // If any of the required methods were not provided, then simply
83 // proxy to the decorated stream.
84 foreach (array_diff(self::SLOTS, array_keys($methods)) as $diff) {
85 /** @var callable $callable */
86 $callable = [$stream, $diff];
87 $methods[$diff] = $callable;
88 }
89
90 return new self($methods);
91 }
92
93 public function __toString(): string
94 {
95 try {
96 /** @var string */
97 return ($this->_fn___toString)();
98 } catch (\Throwable $e) {
99 if (\PHP_VERSION_ID >= 70400) {
100 throw $e;
101 }
102 trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);
103
104 return '';
105 }
106 }
107
108 public function close(): void
109 {
110 ($this->_fn_close)();
111 }
112
113 public function detach()
114 {
115 return ($this->_fn_detach)();
116 }
117
118 public function getSize(): ?int
119 {
120 return ($this->_fn_getSize)();
121 }
122
123 public function tell(): int
124 {
125 return ($this->_fn_tell)();
126 }
127
128 public function eof(): bool
129 {
130 return ($this->_fn_eof)();
131 }
132
133 public function isSeekable(): bool
134 {
135 return ($this->_fn_isSeekable)();
136 }
137
138 public function rewind(): void
139 {
140 ($this->_fn_rewind)();
141 }
142
143 public function seek($offset, $whence = SEEK_SET): void
144 {
145 ($this->_fn_seek)($offset, $whence);
146 }
147
148 public function isWritable(): bool
149 {
150 return ($this->_fn_isWritable)();
151 }
152
153 public function write($string): int
154 {
155 return ($this->_fn_write)($string);
156 }
157
158 public function isReadable(): bool
159 {
160 return ($this->_fn_isReadable)();
161 }
162
163 public function read($length): string
164 {
165 return ($this->_fn_read)($length);
166 }
167
168 public function getContents(): string
169 {
170 return ($this->_fn_getContents)();
171 }
172
173 /**
174 * @return mixed
175 */
176 public function getMetadata($key = null)
177 {
178 return ($this->_fn_getMetadata)($key);
179 }
180 }
181