File "AttributesRuleInferrer.php"

Full Path: /var/www/html/back/vendor/spatie/laravel-data/src/RuleInferrers/AttributesRuleInferrer.php
File size: 1.3 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace Spatie\LaravelData\RuleInferrers;

use Spatie\LaravelData\Attributes\Validation\Present;
use Spatie\LaravelData\Attributes\Validation\Sometimes;
use Spatie\LaravelData\Support\DataProperty;
use Spatie\LaravelData\Support\Validation\PropertyRules;
use Spatie\LaravelData\Support\Validation\RequiringRule;
use Spatie\LaravelData\Support\Validation\RuleNormalizer;
use Spatie\LaravelData\Support\Validation\ValidationContext;
use Spatie\LaravelData\Support\Validation\ValidationRule;

class AttributesRuleInferrer implements RuleInferrer
{
    public function __construct(protected RuleNormalizer $rulesDenormalizer)
    {
    }

    public function handle(
        DataProperty $property,
        PropertyRules $rules,
        ValidationContext $context,
    ): PropertyRules {
        foreach ($property->attributes->all(ValidationRule::class) as $rule) {
            if ($rule instanceof Present && $rules->hasType(RequiringRule::class)) {
                $rules->removeType(RequiringRule::class);
            }

            if ($rule instanceof RequiringRule && $rules->hasType(Sometimes::class)) {
                $rules->removeType(Sometimes::class);
            }

            $rules->add(
                ...$this->rulesDenormalizer->execute($rule)
            );
        }

        return $rules;
    }
}