Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

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