Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
12 / 12
60.00% covered (warning)
60.00%
6 / 10
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ListArray
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
12 / 12
60.00% covered (warning)
60.00%
6 / 10
100.00% covered (success)
100.00%
2 / 2
10.14
100.00% covered (success)
100.00%
1 / 1
 coerce
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
7 / 7
66.67% covered (warning)
66.67%
4 / 6
100.00% covered (success)
100.00%
1 / 1
4.59
 isEmpty
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
50.00% covered (danger)
50.00%
2 / 4
100.00% covered (success)
100.00%
1 / 1
4.12
1<?php
2
3declare(strict_types=1);
4
5namespace Celema\Sire\Coercer;
6
7use Celema\Sire\Coercion;
8use Celema\Sire\CoercionMode;
9use Celema\Sire\Contract;
10use Celema\Sire\Failure;
11use Override;
12
13/** @api */
14final class ListArray implements Contract\Coercer
15{
16    public string $message {
17        get => '{label} must be a list';
18    }
19
20    #[Override]
21    public function coerce(mixed $pristine, CoercionMode $mode): Contract\Coercion
22    {
23        if (
24            is_array($pristine)
25                && (
26                    $pristine === []
27                    || array_keys($pristine) === range(0, count($pristine) - 1)
28                )
29        ) {
30            return new Coercion($pristine, $pristine, empty: $pristine === []);
31        }
32
33        return new Coercion(
34            $pristine,
35            $pristine,
36            Failure::invalid(),
37            empty: self::isEmpty($pristine),
38        );
39    }
40
41    private static function isEmpty(mixed $value): bool
42    {
43        return $value === null || $value === '' || $value === [];
44    }
45}