<?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\Parameter; 
 
use Chevere\Parameter\Interfaces\NullParameterInterface; 
use Chevere\Parameter\Interfaces\TypeInterface; 
use Chevere\Parameter\Traits\ParameterTrait; 
use Chevere\Parameter\Traits\SchemaTrait; 
use TypeError; 
use function Chevere\Message\message; 
 
final class NullParameter implements NullParameterInterface 
{ 
    use ParameterTrait; 
    use SchemaTrait; 
 
    // @phpstan-ignore-next-line 
    private mixed $default; 
 
    public function __invoke(mixed $value): mixed 
    { 
        if ($value === null) { 
            return $value; 
        } 
 
        throw new TypeError( 
            (string) message('Argument value provided is not of type null') 
        ); 
    } 
 
    public function default(): mixed 
    { 
        return null; 
    } 
 
    public function withDefault(mixed $null): NullParameterInterface 
    { 
        $new = clone $this; 
        $new->default = $null; 
 
        return $new; 
    } 
 
    /** 
     * @codeCoverageIgnore 
     */ 
    public function assertCompatible(NullParameterInterface $parameter): void 
    { 
    } 
 
    private function typeName(): string 
    { 
        return TypeInterface::NULL; 
    } 
} 
 
 |