* SPDX-FileContributor: Graham Campbell * SPDX-FileContributor: Henrique Moody * SPDX-FileContributor: Nick Lombard * SPDX-FileContributor: Torben Brodt */ declare(strict_types=1); namespace Respect\Validation\Validators; use Attribute; use Respect\Dev\CodeGen\Attributes\Mixin; use Respect\Validation\Exceptions\InvalidValidatorException; use Respect\Validation\Helpers\CanCompareValues; use Respect\Validation\Message\Template; use Respect\Validation\Validators\Core\Envelope; #[Mixin(include: ['length', 'max', 'min'])] #[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)] #[Template( '{{subject}} must be between {{minValue}} and {{maxValue}}', '{{subject}} must not be between {{minValue}} and {{maxValue}}', )] final class Between extends Envelope { use CanCompareValues; public function __construct(mixed $minValue, mixed $maxValue) { if ($this->toComparable($minValue) >= $this->toComparable($maxValue)) { throw new InvalidValidatorException('Minimum cannot be less than or equals to maximum'); } parent::__construct( new AllOf( new GreaterThanOrEqual($minValue), new LessThanOrEqual($maxValue), ), [ 'minValue' => $minValue, 'maxValue' => $maxValue, ], ); } }