44
55namespace Patchlevel \Hydrator ;
66
7- use Patchlevel \Hydrator \Guesser \BuiltInGuesser ;
8- use Patchlevel \Hydrator \Guesser \ChainGuesser ;
9- use Patchlevel \Hydrator \Guesser \Guesser ;
107use Patchlevel \Hydrator \Metadata \AttributeMetadataFactory ;
118use Patchlevel \Hydrator \Metadata \ClassMetadata ;
129use Patchlevel \Hydrator \Metadata \ClassNotFound ;
10+ use Patchlevel \Hydrator \Metadata \MetadataEnricher ;
1311use Patchlevel \Hydrator \Metadata \MetadataFactory ;
1412use Patchlevel \Hydrator \Middleware \Middleware ;
1513use Patchlevel \Hydrator \Middleware \Stack ;
16- use Patchlevel \Hydrator \Middleware \TransformMiddleware ;
1714use Patchlevel \Hydrator \Normalizer \HydratorAwareNormalizer ;
1815use ReflectionClass ;
1916
@@ -26,10 +23,14 @@ final class MetadataHydrator implements Hydrator
2623 /** @var array<class-string, ClassMetadata> */
2724 private array $ classMetadata = [];
2825
29- /** @param list<Middleware> $middlewares */
26+ /**
27+ * @param list<Middleware> $middlewares
28+ * @param list<MetadataEnricher> $metadataEnrichers
29+ */
3030 public function __construct (
3131 private readonly MetadataFactory $ metadataFactory = new AttributeMetadataFactory (),
3232 private readonly array $ middlewares = [],
33+ private readonly array $ metadataEnrichers = [],
3334 private readonly bool $ defaultLazy = false ,
3435 ) {
3536 }
@@ -110,33 +111,10 @@ private function metadata(string $class): ClassMetadata
110111 $ property ->normalizer ->setHydrator ($ this );
111112 }
112113
113- return $ metadata ;
114- }
115-
116- /**
117- * @param list<Middleware> $additionalMiddleware
118- * @param iterable<Guesser> $guessers
119- */
120- public static function create (
121- array $ additionalMiddleware = [],
122- iterable $ guessers = [],
123- bool $ defaultLazy = false ,
124- ): self {
125- $ guesser = new BuiltInGuesser ();
126-
127- if ($ guessers !== []) {
128- $ guesser = new ChainGuesser ([
129- ...$ guessers ,
130- $ guesser ,
131- ]);
114+ foreach ($ this ->metadataEnrichers as $ enricher ) {
115+ $ enricher ->enrich ($ metadata );
132116 }
133117
134- return new self (
135- new AttributeMetadataFactory (
136- guesser: $ guesser ,
137- ),
138- [...$ additionalMiddleware , new TransformMiddleware ()],
139- $ defaultLazy ,
140- );
118+ return $ metadata ;
141119 }
142120}
0 commit comments