Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
MaxLength
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
1 / 1
 validate
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Celema\Sire\Rule;
6
7use Celema\Sire\Contract;
8use Celema\Sire\Validation;
9use Override;
10
11/** @api */
12final class MaxLength implements Contract\Rule, Contract\NamedArguments
13{
14    public string $message {
15        get => '{label} must be at most {max} characters';
16    }
17
18    public array $arguments {
19        get => ['max'];
20    }
21
22    #[Override]
23    public function validate(Contract\Value $value, string ...$args): Contract\Validation
24    {
25        return Validation::from(is_string($value->value) && mb_strlen($value->value) <= (int) ($args[0] ?? null));
26    }
27}