| 
<?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();
 }
 }
 }
 
 |