Skip to content

Commit 774a87d

Browse files
committed
simplify extension api
1 parent 1c33a73 commit 774a87d

9 files changed

Lines changed: 50 additions & 70 deletions

src/CoreExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use Patchlevel\Hydrator\Middleware\Middleware;
1010
use Patchlevel\Hydrator\Middleware\TransformMiddleware;
1111

12-
final class CoreExtension implements MiddlewareProvider, GuesserProvider
12+
final class CoreExtension extends Extension
1313
{
1414
/** @return iterable<Middleware|array{0: Middleware, 1?: int}> */
1515
public function middlewares(): iterable

src/Cryptography/CryptographyExtension.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44

55
namespace Patchlevel\Hydrator\Cryptography;
66

7+
use Patchlevel\Hydrator\Extension;
78
use Patchlevel\Hydrator\Metadata\MetadataEnricher;
8-
use Patchlevel\Hydrator\MetadataEnricherProvider;
99
use Patchlevel\Hydrator\Middleware\Middleware;
10-
use Patchlevel\Hydrator\MiddlewareProvider;
1110

12-
final class CryptographyExtension implements MiddlewareProvider, MetadataEnricherProvider
11+
final class CryptographyExtension extends Extension
1312
{
1413
public function __construct(
1514
private readonly PayloadCryptographer $cryptography,

src/Extension.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Patchlevel\Hydrator;
6+
7+
use Patchlevel\Hydrator\Guesser\Guesser;
8+
use Patchlevel\Hydrator\Metadata\MetadataEnricher;
9+
use Patchlevel\Hydrator\Middleware\Middleware;
10+
11+
abstract class Extension
12+
{
13+
/** @return iterable<Middleware|array{0: Middleware, 1?: int}> */
14+
public function middlewares(): iterable
15+
{
16+
return [];
17+
}
18+
19+
/** @return iterable<MetadataEnricher|array{0: MetadataEnricher, 1?: int}> */
20+
public function metadataEnrichers(): iterable
21+
{
22+
return [];
23+
}
24+
25+
/** @return iterable<Guesser|array{0: Guesser, 1?: int}> */
26+
public function guesser(): iterable
27+
{
28+
return [];
29+
}
30+
}

src/GuesserProvider.php

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/MetadataEnricherProvider.php

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/MetadataHydrator.php

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ private function metadata(string $class): ClassMetadata
122122
return $metadata;
123123
}
124124

125-
/** @param iterable<MiddlewareProvider|MetadataEnricherProvider|GuesserProvider> $extensions */
125+
/** @param iterable<Extension> $extensions */
126126
public static function create(
127127
iterable $extensions = [],
128128
bool $defaultLazy = false,
@@ -134,30 +134,22 @@ public static function create(
134134
$guessers = [];
135135

136136
foreach ($extensions as $extension) {
137-
if ($extension instanceof MiddlewareProvider) {
138-
foreach ($extension->middlewares() as $entry) {
139-
if ($entry instanceof Middleware) {
140-
$middlewares[0][] = $entry;
141-
} else {
142-
$middlewares[$entry[1] ?? 0][] = $entry[0];
143-
}
137+
foreach ($extension->middlewares() as $entry) {
138+
if ($entry instanceof Middleware) {
139+
$middlewares[0][] = $entry;
140+
} else {
141+
$middlewares[$entry[1] ?? 0][] = $entry[0];
144142
}
145143
}
146144

147-
if ($extension instanceof MetadataEnricherProvider) {
148-
foreach ($extension->metadataEnrichers() as $entry) {
149-
if ($entry instanceof MetadataEnricher) {
150-
$enrichers[0][] = $entry;
151-
} else {
152-
$enrichers[$entry[1] ?? 0][] = $entry[0];
153-
}
145+
foreach ($extension->metadataEnrichers() as $entry) {
146+
if ($entry instanceof MetadataEnricher) {
147+
$enrichers[0][] = $entry;
148+
} else {
149+
$enrichers[$entry[1] ?? 0][] = $entry[0];
154150
}
155151
}
156152

157-
if (!($extension instanceof GuesserProvider)) {
158-
continue;
159-
}
160-
161153
foreach ($extension->guesser() as $entry) {
162154
if ($entry instanceof Guesser) {
163155
$guessers[0][] = $entry;

src/MiddlewareProvider.php

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@
44

55
namespace Patchlevel\Hydrator\Tests\Unit\Fixture;
66

7+
use Patchlevel\Hydrator\Extension;
78
use Patchlevel\Hydrator\Guesser\Guesser;
8-
use Patchlevel\Hydrator\GuesserProvider;
99
use Patchlevel\Hydrator\Metadata\MetadataEnricher;
10-
use Patchlevel\Hydrator\MetadataEnricherProvider;
1110
use Patchlevel\Hydrator\Middleware\Middleware;
12-
use Patchlevel\Hydrator\MiddlewareProvider;
1311

14-
final class Extension implements MiddlewareProvider, MetadataEnricherProvider, GuesserProvider
12+
final class DummyExtension extends Extension
1513
{
1614
/**
1715
* @param iterable<Middleware> $middlewares

tests/Unit/MetadataHydratorTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
use Patchlevel\Hydrator\Tests\Unit\Fixture\Circle2Dto;
2626
use Patchlevel\Hydrator\Tests\Unit\Fixture\Circle3Dto;
2727
use Patchlevel\Hydrator\Tests\Unit\Fixture\DefaultDto;
28+
use Patchlevel\Hydrator\Tests\Unit\Fixture\DummyExtension;
2829
use Patchlevel\Hydrator\Tests\Unit\Fixture\Email;
29-
use Patchlevel\Hydrator\Tests\Unit\Fixture\Extension;
3030
use Patchlevel\Hydrator\Tests\Unit\Fixture\InferNormalizerDto;
3131
use Patchlevel\Hydrator\Tests\Unit\Fixture\InferNormalizerWithIterablesDto;
3232
use Patchlevel\Hydrator\Tests\Unit\Fixture\InferNormalizerWithNullableDto;
@@ -168,7 +168,7 @@ public function testExtractWithContext(): void
168168
$this->isInstanceOf(Stack::class),
169169
)->willReturn($expect);
170170

171-
$hydrator = MetadataHydrator::create([new Extension([$middleware])]);
171+
$hydrator = MetadataHydrator::create([new DummyExtension([$middleware])]);
172172

173173
$data = $hydrator->extract($object, ['context' => '123']);
174174

@@ -286,7 +286,7 @@ public function testHydrateWithContext(): void
286286
$this->isInstanceOf(Stack::class),
287287
)->willReturn($expect);
288288

289-
$hydrator = MetadataHydrator::create([new Extension([$middleware])]);
289+
$hydrator = MetadataHydrator::create([new DummyExtension([$middleware])]);
290290

291291
$object = $hydrator->hydrate(InferNormalizerDto::class, $data, ['context' => '123']);
292292

@@ -556,7 +556,7 @@ public function guess(ObjectType $type): Normalizer|null
556556

557557
$hydrator = MetadataHydrator::create(
558558
[
559-
new Extension(
559+
new DummyExtension(
560560
[
561561
new class implements Middleware {
562562
/**

0 commit comments

Comments
 (0)