HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/dashboard.orbiwheels.com/vendor/kreait/firebase-php/src/Firebase/Valinor/Mapper.php
<?php

declare(strict_types=1);

namespace Kreait\Firebase\Valinor;

use CuyZ\Valinor\Mapper\MappingError;
use CuyZ\Valinor\MapperBuilder;
use Kreait\Firebase\Exception\InvalidArgumentException;
use Kreait\Firebase\Valinor\Converter\SnakeCaseToCamelCaseConverter;

/**
 * @internal
 */
final class Mapper
{
    private readonly MapperBuilder $mapperBuilder;

    public function __construct(private readonly mixed $cache = null, ?MapperBuilder $builder = null)
    {
        $builder ??= new MapperBuilder();

        if ($cache !== null) {
            $builder = $builder->withCache($this->cache);
        }

        $this->mapperBuilder = $builder;
    }

    public function withConverter(callable $converter): self
    {
        $mapperBuilder = $this->mapperBuilder->registerConverter($converter); // @phpstan-ignore-line argument.type

        return new self($this->cache, $mapperBuilder);
    }

    public function snakeToCamelCase(): self
    {
        return $this->withConverter(new SnakeCaseToCamelCaseConverter());
    }

    public function allowSuperfluousKeys(): self
    {
        return new self($this->cache, $this->mapperBuilder->allowSuperfluousKeys());
    }

    /**
     * @template T
     * @param class-string<T> $signature
     *
     * @throws InvalidArgumentException
     *
     * @return T
     */
    public function map(string $signature, mixed $source): mixed
    {
        try {
            return $this->mapperBuilder->mapper()->map($signature, $source);
        } catch (MappingError $e) {
            $errorMessages = [];
            foreach ($e->messages() as $message) {
                $errorMessages[] = '- `'.$message->path().'`: '.$message->toString();
            }

            $message = "Could not map type `$signature`:".PHP_EOL;
            $message .= implode(PHP_EOL, $errorMessages);

            throw new InvalidArgumentException($message, 0, $e);
        }
    }
}