<?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\Tests\src; 
 
use Chevere\Parameter\Exceptions\ParameterException; 
use Chevere\Parameter\Interfaces\ParameterAttributeInterface; 
use Throwable; 
use function Chevere\Parameter\Attributes\arrayArguments; 
use function Chevere\Parameter\Attributes\arrayAttr; 
use function Chevere\Parameter\Attributes\boolAttr; 
use function Chevere\Parameter\Attributes\enumAttr; 
use function Chevere\Parameter\Attributes\floatAttr; 
use function Chevere\Parameter\Attributes\intAttr; 
use function Chevere\Parameter\Attributes\iteratorAttr; 
use function Chevere\Parameter\Attributes\nullAttr; 
use function Chevere\Parameter\Attributes\returnAttr; 
use function Chevere\Parameter\Attributes\stringAttr; 
use function Chevere\Parameter\Attributes\valid; 
use function PHPUnit\Framework\assertSame; 
 
final class NoUsesAttr 
{ 
    public function __construct( 
        string $name = 'Test', 
        int $age = 12, 
        array $cols = [ 
            'id' => 1, 
        ], 
        iterable $tags = ['Chevere', 'Chevere', 'Chevere', 'Uh'], 
        bool $flag = false, 
        float $amount = 0, 
        mixed $null = null, 
        string $enum = 'value', 
    ) { 
        // Validate all 
        valid(); 
        // Pick validation 
        valid('name'); 
        valid('age'); 
        valid('cols'); 
        valid('tags'); 
        valid('flag'); 
        valid('amount'); 
 
        try { 
            valid('404'); 
        } catch (ParameterException $e) { 
            assertSame( 
                'Parameter `404` not found', 
                $e->getMessage() 
            ); 
        } 
        // Get attribute, validate and return 
        try { 
            $name = stringAttr('name')($name); 
        } catch (Throwable $e) { 
            assertSame( 
                'No `' . ParameterAttributeInterface::class . '` attribute for parameter `name`', 
                $e->getMessage() 
            ); 
        } 
        // $age = intAttr('age')($age); 
        // $cols = arrayAttr('cols')($cols); 
        // $id = arrayArguments('cols')->required('id')->int(); 
        // $tags = iteratorAttr('tags')($tags); 
        // $flag = boolAttr('flag')($flag); 
        // $amount = floatAttr('amount')($amount); 
        // $null = nullAttr('null')($null); 
        // $enum = enumAttr('enum')($enum); 
        // Validate return attr 
        // returnAttr()($id); 
    } 
 
    public function run(): int 
    { 
        return returnAttr()(1); 
    } 
 
    public static function return(): int 
    { 
        return 120; 
    } 
} 
 
 |