* SPDX-FileContributor: Graham Campbell * SPDX-FileContributor: Henrique Moody * SPDX-FileContributor: Hugo Hamon * SPDX-FileContributor: Nick Lombard */ declare(strict_types=1); namespace Respect\Validation\Validators; use Attribute; use Respect\Dev\CodeGen\Attributes\Mixin; use Respect\Validation\Message\Template; use Respect\Validation\Result; use Respect\Validation\Validator; use function is_scalar; #[Mixin(include: ['length', 'max', 'min'])] #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)] #[Template( '{{subject}} must be equal to {{compareTo}}', '{{subject}} must not be equal to {{compareTo}}', )] final readonly class Equals implements Validator { public function __construct( private mixed $compareTo, ) { } public function evaluate(mixed $input): Result { $parameters = ['compareTo' => $this->compareTo]; if (is_scalar($input) === is_scalar($this->compareTo)) { return Result::of($input == $this->compareTo, $input, $this, $parameters); } return Result::failed($input, $this, $parameters); } }