Serde
Serde copied to clipboard
Can't deserialize prefixed flattened subtypes that include enums
<?php
require_once('./vendor/autoload.php');
enum BType: string
{
case Foo = 'foo';
}
readonly class B
{
public function __construct(public BType $type) {}
}
readonly class A
{
public function __construct(
#[\Crell\Serde\Attributes\Field(flatten: true, flattenPrefix: 'b_')]
public B $b,
) {}
}
$serialized = ['b_type' => 'foo'];
$result = (new \Crell\Serde\SerdeCommon())->deserialize($serialized, 'array', A::class);
var_dump($result);
Results in:
PHP Warning: Attempt to read property "keyType" on null in /home/coder/defaultsite/vendor/crell/serde/src/InvalidArrayKeyType.php on line 24
PHP Fatal error: Uncaught Crell\Serde\InvalidArrayKeyType: Property type is marked as needing an array key of type , but invalid found. in /home/coder/defaultsite/vendor/crell/serde/src/InvalidArrayKeyType.php:17
Stack trace:
#0 /home/coder/defaultsite/vendor/crell/serde/src/PropertyHandler/ObjectImporter.php(70): Crell\Serde\InvalidArrayKeyType::create()
#1 /home/coder/defaultsite/vendor/crell/serde/src/PropertyHandler/ObjectImporter.php(101): Crell\Serde\PropertyHandler\ObjectImporter->populateObject()
#2 /home/coder/defaultsite/vendor/crell/serde/src/PropertyHandler/ObjectImporter.php(36): Crell\Serde\PropertyHandler\ObjectImporter->populateObject()
#3 /home/coder/defaultsite/vendor/crell/serde/src/Deserializer.php(31): Crell\Serde\PropertyHandler\ObjectImporter->importValue()
#4 /home/coder/defaultsite/vendor/crell/serde/src/Serde.php(114): Crell\Serde\Deserializer->deserialize()
#5 /home/coder/defaultsite/test.php(24): Crell\Serde\Serde->deserialize()
#6 {main}
thrown in /home/coder/defaultsite/vendor/crell/serde/src/InvalidArrayKeyType.php on line 17