Skip to content

Commit 1cb50c3

Browse files
authored
Add resolvers for standalone true and false types (#5)
1 parent 6f0a7af commit 1cb50c3

File tree

4 files changed

+60
-0
lines changed

4 files changed

+60
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PrinsFrank\ObjectResolver\Parameter\TypeResolver;
4+
5+
use Override;
6+
use PrinsFrank\ObjectResolver\ObjectResolver;
7+
8+
/** @implements TypeResolver<bool> */
9+
class FalseResolver implements TypeResolver {
10+
#[Override]
11+
public function acceptsType(string $type): bool {
12+
return $type === 'false';
13+
}
14+
15+
#[Override]
16+
public function resolveValue(string $type, mixed $value, ObjectResolver $objectResolver): ?bool {
17+
if (is_bool($value)) {
18+
return $value;
19+
}
20+
21+
if ($value === 'false' || $value === '0' || $value === 0) {
22+
return false;
23+
}
24+
25+
return null;
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace PrinsFrank\ObjectResolver\Parameter\TypeResolver;
4+
5+
use Override;
6+
use PrinsFrank\ObjectResolver\ObjectResolver;
7+
8+
/** @implements TypeResolver<bool> */
9+
class TrueResolver implements TypeResolver {
10+
#[Override]
11+
public function acceptsType(string $type): bool {
12+
return $type === 'true';
13+
}
14+
15+
#[Override]
16+
public function resolveValue(string $type, mixed $value, ObjectResolver $objectResolver): ?bool {
17+
if (is_bool($value)) {
18+
return $value;
19+
}
20+
21+
if ($value === 'true' || $value === '1' || $value === 1) {
22+
return true;
23+
}
24+
25+
return null;
26+
}
27+
}

src/Parameter/TypeResolver/TypeResolverProvider.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ public function __construct(
1212
ClassResolver::class,
1313
DateTimeImmutableResolver::class,
1414
DateTimeResolver::class,
15+
FalseResolver::class,
1516
FloatResolver::class,
1617
IntBackedEnumResolver::class,
1718
IntResolver::class,
1819
StringBackedEnumResolver::class,
1920
StringResolver::class,
21+
TrueResolver::class,
2022
UnitEnumResolver::class,
2123
]
2224
) {

tests/Unit/Parameter/TypeResolver/TypeResolverProviderTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use PHPUnit\Framework\Attributes\CoversClass;
66
use PHPUnit\Framework\TestCase;
77
use PrinsFrank\ObjectResolver\Exception\InvalidTypeResolverException;
8+
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\FalseResolver;
89
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\IntBackedEnumResolver;
910
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\StringBackedEnumResolver;
1011
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\BoolResolver;
@@ -14,6 +15,7 @@
1415
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\FloatResolver;
1516
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\IntResolver;
1617
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\StringResolver;
18+
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\TrueResolver;
1719
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\TypeResolverProvider;
1820
use PrinsFrank\ObjectResolver\Parameter\TypeResolver\UnitEnumResolver;
1921

@@ -27,11 +29,13 @@ public function testAll(): void {
2729
ClassResolver::class,
2830
DateTimeImmutableResolver::class,
2931
DateTimeResolver::class,
32+
FalseResolver::class,
3033
FloatResolver::class,
3134
IntBackedEnumResolver::class,
3235
IntResolver::class,
3336
StringBackedEnumResolver::class,
3437
StringResolver::class,
38+
TrueResolver::class,
3539
UnitEnumResolver::class,
3640
],
3741
$typeResolverProvider->all(),

0 commit comments

Comments
 (0)