更新日志 1.3.0 — 2023 年 2 月 8 日¶
重要变更¶
处理自定义枚举构造函数注册
现在可以为枚举注册自定义构造函数,就像为类注册自定义构造函数一样。
(new \CuyZ\Valinor\MapperBuilder())
->registerConstructor(
// Allow the native constructor to be used
SomeEnum::class,
// Register a named constructor
SomeEnum::fromMatrix(...)
)
->mapper()
->map(SomeEnum::class, [
'type' => 'FOO',
'number' => 'BAR',
]);
enum SomeEnum: string
{
case CASE_A = 'FOO_VALUE_1';
case CASE_B = 'FOO_VALUE_2';
case CASE_C = 'BAR_VALUE_1';
case CASE_D = 'BAR_VALUE_2';
/**
* @param 'FOO'|'BAR' $type
* @param int<1, 2> $number
* /
public static function fromMatrix(string $type, int $number): self
{
return self::from("{$type}_VALUE_{$number}");
}
}
枚举构造函数可以用于特定模式:
enum SomeEnum
{
case FOO;
case BAR;
case BAZ;
}
(new \CuyZ\Valinor\MapperBuilder())
->registerConstructor(
/**
* This constructor will be called only when pattern
* `SomeEnum::BA*` is requested during mapping.
*
* @return SomeEnum::BA*
*/
fn (string $value): SomeEnum => /* Some custom domain logic */
)
->mapper()
->map(SomeEnum::class . '::BA*', 'some custom value');
请注意,此提交需要大量的重构工作,导致包含枚举和其他类型的联合类型回归。由于这些情况被认为是边缘性的,因此这种更改被认为是非破坏性的。
新功能¶
- 处理自定义枚举构造函数注册( 217e12 )
其他¶
- 将枚举类型处理为类类型( 5a3caf )