<?php 
 
/* 
 * This file is part of Chevere. 
 * 
 * (c) Rodolfo Berrios <[email protected]> 
 * 
 * For the full copyright and license information, please view the LICENSE 
 * file that was distributed with this source code. 
 */ 
 
declare(strict_types=1); 
 
namespace Chevere\VarDump; 
 
use Chevere\VarDump\Interfaces\FormatInterface; 
use Chevere\VarDump\Interfaces\OutputInterface; 
use Chevere\VarDump\Interfaces\VarOutputInterface; 
use Chevere\Writer\Interfaces\WriterInterface; 
 
final class VarOutput implements VarOutputInterface 
{ 
    private ObjectIds $objectReferences; 
 
    /** 
     * @param array<array<string, mixed>> $trace 
     */ 
    public function __construct( 
        private WriterInterface $writer, 
        private array $trace, 
        private FormatInterface $format, 
    ) { 
    } 
 
    public function process(OutputInterface $output, mixed ...$variables): void 
    { 
        $output->setUp($this->writer, $this->trace); 
        $output->prepare(); 
        $output->writeCallerFile($this->format); 
        $this->handleArgs(...$variables); 
        $output->finalize(); 
    } 
 
    private function handleArgs(mixed ...$variables): void 
    { 
        $aux = 0; 
        foreach ($variables as $name => $value) { 
            $this->objectReferences = new ObjectIds(); 
            $aux++; 
            if (is_int($name)) { 
                $name = $aux; 
            } 
            $varDumper = new VarDumper( 
                $this->writer, 
                $this->format, 
                new VarDumpable($value), 
                $this->objectReferences 
            ); 
            $this->writer->write( 
                str_repeat("\n", (int) ($aux === 1 ?: 2)) 
                . strval($name) . ': ' 
            ); 
            $varDumper->withProcess(); 
        } 
    } 
} 
 
 |