43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace GuzzleHttp\Psr7;
 | |
| 
 | |
| use Psr\Http\Message\StreamInterface;
 | |
| 
 | |
| /**
 | |
|  * Stream decorator that begins dropping data once the size of the underlying
 | |
|  * stream becomes too full.
 | |
|  */
 | |
| class DroppingStream implements StreamInterface
 | |
| {
 | |
|     use StreamDecoratorTrait;
 | |
| 
 | |
|     private $maxLength;
 | |
| 
 | |
|     /**
 | |
|      * @param StreamInterface $stream    Underlying stream to decorate.
 | |
|      * @param int             $maxLength Maximum size before dropping data.
 | |
|      */
 | |
|     public function __construct(StreamInterface $stream, $maxLength)
 | |
|     {
 | |
|         $this->stream = $stream;
 | |
|         $this->maxLength = $maxLength;
 | |
|     }
 | |
| 
 | |
|     public function write($string)
 | |
|     {
 | |
|         $diff = $this->maxLength - $this->stream->getSize();
 | |
| 
 | |
|         // Begin returning 0 when the underlying stream is too large.
 | |
|         if ($diff <= 0) {
 | |
|             return 0;
 | |
|         }
 | |
| 
 | |
|         // Write the stream or a subset of the stream if needed.
 | |
|         if (strlen($string) < $diff) {
 | |
|             return $this->stream->write($string);
 | |
|         }
 | |
| 
 | |
|         return $this->stream->write(substr($string, 0, $diff));
 | |
|     }
 | |
| }
 |