56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Ulmus\Api\Stream;
 | 
						|
 | 
						|
use Psr\Http\Message\ResponseInterface;
 | 
						|
use Psr\Http\Message\StreamInterface;
 | 
						|
use Ulmus\Api\Common\HttpHeaderEnum;
 | 
						|
use Ulmus\Api\Stream\Stream;
 | 
						|
use Ulmus\Api\Common\StreamOutputInterface;
 | 
						|
 | 
						|
class JsonStream extends Stream
 | 
						|
{
 | 
						|
    public const DEFAULT_JSON_ENCODING_FLAGS = JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_TAG | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR;
 | 
						|
 | 
						|
    public const DEFAULT_JSON_DECODING_FLAGS = JSON_THROW_ON_ERROR;
 | 
						|
 | 
						|
    public int $depth = 1024;
 | 
						|
 | 
						|
    public int $encodingOptions;
 | 
						|
 | 
						|
    public int $decodingOptions;
 | 
						|
 | 
						|
    public function __construct($encodingOptions = self::DEFAULT_JSON_ENCODING_FLAGS, $decodingOptions = self::DEFAULT_JSON_DECODING_FLAGS)
 | 
						|
    {
 | 
						|
        $this->encodingOptions = $encodingOptions;
 | 
						|
        $this->decodingOptions = $decodingOptions;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function fromContent(mixed $content, int $encodingOptions = self::DEFAULT_JSON_ENCODING_FLAGS) : StreamInterface
 | 
						|
    {
 | 
						|
        if ( false === $json = json_encode($content, $encodingOptions) ) {
 | 
						|
            throw new \InvalidArgumentException(sprintf('Json encoding failed with message `%s`.', json_last_error_msg()));
 | 
						|
        }
 | 
						|
 | 
						|
        return static::fromJsonEncoded($json);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function fromJsonEncoded(string $json) : StreamInterface
 | 
						|
    {
 | 
						|
        $obj = static::fromTemp($json);
 | 
						|
        $obj->rewind();
 | 
						|
 | 
						|
        return $obj;
 | 
						|
    }
 | 
						|
 | 
						|
    public function decode(): mixed
 | 
						|
    {
 | 
						|
        $content = $this->getContents();
 | 
						|
 | 
						|
        if ($content === "") {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        return json_decode($content, true, $this->depth, $this->decodingOptions);
 | 
						|
    }
 | 
						|
} |