Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/Normalizer/ArrayNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,9 @@ public function handleType(Type|null $type): void

$this->normalizer->handleType($type->getCollectionValueType());
}

public function innerNormalizer(): Normalizer
{
return $this->normalizer;
}
}
6 changes: 6 additions & 0 deletions src/Normalizer/ArrayShapeNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,10 @@ public function handleType(Type|null $type): void
$normalizer->handleType($shape[$field]['type']);
}
}

/** @return array<array-key, Normalizer> */
public function innerNormalizers(): array
{
return $this->normalizerMap;
}
}
12 changes: 10 additions & 2 deletions src/Normalizer/EnumNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use Attribute;
use BackedEnum;
use Deprecated;
use ReflectionType;
use Symfony\Component\TypeInfo\Type;
use Symfony\Component\TypeInfo\Type\BackedEnumType;
Expand All @@ -30,7 +31,7 @@ public function normalize(mixed $value): mixed
return null;
}

$enum = $this->getEnum();
$enum = $this->className();

if (!$value instanceof $enum) {
throw InvalidArgument::withWrongType($enum . '|null', $value);
Expand All @@ -49,7 +50,7 @@ public function denormalize(mixed $value): BackedEnum|null
throw InvalidArgument::withWrongType('string|int|null', $value);
}

$enum = $this->getEnum();
$enum = $this->className();

try {
return $enum::from($value);
Expand Down Expand Up @@ -86,7 +87,14 @@ public function handleType(Type|null $type): void
}

/** @return class-string<BackedEnum> */
#[Deprecated('Use `className()` method instead')]
public function getEnum(): string
{
return $this->className();
}

/** @return class-string<BackedEnum> */
public function className(): string
{
if ($this->enum === null) {
throw InvalidType::missingType();
Expand Down
12 changes: 10 additions & 2 deletions src/Normalizer/ObjectNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Patchlevel\Hydrator\Normalizer;

use Attribute;
use Deprecated;
use Patchlevel\Hydrator\Hydrator;
use Patchlevel\Hydrator\HydratorWithContext;
use ReflectionType;
Expand Down Expand Up @@ -42,7 +43,7 @@ public function normalize(mixed $value, array $context = []): array|null
return null;
}

$className = $this->getClassName();
$className = $this->className();

if (!$value instanceof $className) {
throw InvalidArgument::withWrongType($className . '|null', $value);
Expand Down Expand Up @@ -70,7 +71,7 @@ public function denormalize(mixed $value, array $context = []): object|null
throw InvalidArgument::withWrongType('array<string, mixed>|null', $value);
}

$className = $this->getClassName();
$className = $this->className();

if ($this->hydrator instanceof HydratorWithContext) {
return $this->hydrator->hydrate($className, $value, $context);
Expand Down Expand Up @@ -120,7 +121,14 @@ public function handleType(Type|null $type): void
}

/** @return class-string */
#[Deprecated('Use `className()` method instead')]
public function getClassName(): string
{
return $this->className();
}

/** @return class-string */
public function className(): string
{
if ($this->className === null) {
throw InvalidType::missingType();
Expand Down
8 changes: 8 additions & 0 deletions tests/Unit/Normalizer/ArrayNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,12 @@ public function testPassHydrator(): void
$normalizer = new ArrayNormalizer($normalizer);
$normalizer->setHydrator($hydrator);
}

public function testInnerNormalizer(): void
{
$innerNormalizer = $this->createMock(Normalizer::class);
$normalizer = new ArrayNormalizer($innerNormalizer);

self::assertSame($innerNormalizer, $normalizer->innerNormalizer());
}
}
8 changes: 8 additions & 0 deletions tests/Unit/Normalizer/ArrayShapeNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,12 @@ public function testPassHydrator(): void
$normalizer = new ArrayShapeNormalizer(['foo' => $normalizer]);
$normalizer->setHydrator($hydrator);
}

public function testInnerNormalizers(): void
{
$innerNormalizer = $this->createMock(Normalizer::class);
$normalizer = new ArrayShapeNormalizer(['foo' => $innerNormalizer]);

self::assertSame(['foo' => $innerNormalizer], $normalizer->innerNormalizers());
}
}
8 changes: 4 additions & 4 deletions tests/Unit/Normalizer/EnumNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,23 +69,23 @@ public function testAutoDetect(): void
$normalizer = new EnumNormalizer();
$normalizer->handleReflectionType($this->reflectionType(AutoTypeDto::class, 'status'));

self::assertEquals(Status::class, $normalizer->getEnum());
self::assertEquals(Status::class, $normalizer->className());
}

public function testAutoDetectOverrideNotPossible(): void
{
$normalizer = new EnumNormalizer(AnotherEnum::class);
$normalizer->handleReflectionType($this->reflectionType(AutoTypeDto::class, 'status'));

self::assertEquals(AnotherEnum::class, $normalizer->getEnum());
self::assertEquals(AnotherEnum::class, $normalizer->className());
}

public function testAutoDetectMissingType(): void
{
$this->expectException(InvalidType::class);

$normalizer = new EnumNormalizer();
$normalizer->getEnum();
$normalizer->className();
}

public function testAutoDetectMissingTypeBecauseNull(): void
Expand All @@ -95,7 +95,7 @@ public function testAutoDetectMissingTypeBecauseNull(): void
$normalizer = new EnumNormalizer();
$normalizer->handleReflectionType(null);

$normalizer->getEnum();
$normalizer->className();
}

/** @param class-string $class */
Expand Down
12 changes: 6 additions & 6 deletions tests/Unit/Normalizer/ObjectNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ public function testAutoDetect(): void
$normalizer->setHydrator($hydrator);
$normalizer->handleReflectionType($this->reflectionType(AutoTypeDto::class, 'profileCreated'));

self::assertEquals(ProfileCreated::class, $normalizer->getClassName());
self::assertEquals(ProfileCreated::class, $normalizer->className());
}

public function testAutoDetectOverrideNotPossible(): void
Expand All @@ -200,7 +200,7 @@ public function testAutoDetectOverrideNotPossible(): void
$normalizer->setHydrator($hydrator);
$normalizer->handleReflectionType($this->reflectionType(AutoTypeDto::class, 'profileCreated'));

self::assertEquals(AutoTypeDto::class, $normalizer->getClassName());
self::assertEquals(AutoTypeDto::class, $normalizer->className());
}

public function testAutoDetectMissingType(): void
Expand All @@ -212,7 +212,7 @@ public function testAutoDetectMissingType(): void
$normalizer = new ObjectNormalizer();
$normalizer->setHydrator($hydrator);

$normalizer->getClassName();
$normalizer->className();
}

public function testAutoDetectMissingTypeBecauseNull(): void
Expand All @@ -225,7 +225,7 @@ public function testAutoDetectMissingTypeBecauseNull(): void
$normalizer->setHydrator($hydrator);
$normalizer->handleReflectionType(null);

$normalizer->getClassName();
$normalizer->className();
}

public function testGeneric(): void
Expand All @@ -236,7 +236,7 @@ public function testGeneric(): void
$normalizer->setHydrator($hydrator);
$normalizer->handleType(Type::generic(Type::object(ProfileCreated::class)));

self::assertEquals(ProfileCreated::class, $normalizer->getClassName());
self::assertEquals(ProfileCreated::class, $normalizer->className());
}

public function testTemplate(): void
Expand All @@ -247,7 +247,7 @@ public function testTemplate(): void
$normalizer->setHydrator($hydrator);
$normalizer->handleType(Type::template('T', Type::object(ProfileCreated::class)));

self::assertEquals(ProfileCreated::class, $normalizer->getClassName());
self::assertEquals(ProfileCreated::class, $normalizer->className());
}

public function testSerialize(): void
Expand Down
Loading