krz/vox-populi

A Tumblr web client.

clone: git clone https://gitbay.org/krz/vox-populi.git

main: vendor/guzzlehttp/psr7/src/DroppingStream.php · raw

 1<?php
 2namespace GuzzleHttp\Psr7;
 3
 4use Psr\Http\Message\StreamInterface;
 5
 6/**
 7 * Stream decorator that begins dropping data once the size of the underlying
 8 * stream becomes too full.
 9 */
10class DroppingStream implements StreamInterface
11{
12    use StreamDecoratorTrait;
13
14    private $maxLength;
15
16    /**
17     * @param StreamInterface $stream    Underlying stream to decorate.
18     * @param int             $maxLength Maximum size before dropping data.
19     */
20    public function __construct(StreamInterface $stream, $maxLength)
21    {
22        $this->stream = $stream;
23        $this->maxLength = $maxLength;
24    }
25
26    public function write($string)
27    {
28        $diff = $this->maxLength - $this->stream->getSize();
29
30        // Begin returning 0 when the underlying stream is too large.
31        if ($diff <= 0) {
32            return 0;
33        }
34
35        // Write the stream or a subset of the stream if needed.
36        if (strlen($string) < $diff) {
37            return $this->stream->write($string);
38        }
39
40        return $this->stream->write(substr($string, 0, $diff));
41    }
42}