2121use Tempest \Mapper \Casters \JsonToArrayCaster ;
2222use Tempest \Mapper \Casters \NativeDateTimeCaster ;
2323use Tempest \Mapper \Casters \ObjectCaster ;
24+ use Tempest \Mapper \Casters \StringCaster ;
25+ use Tempest \Mapper \Casters \UnionCaster ;
2426use Tempest \Reflection \PropertyReflector ;
2527use UnitEnum ;
2628
@@ -29,21 +31,30 @@ final class CasterFactoryInitializer implements Initializer
2931 #[Singleton]
3032 public function initialize (Container $ container ): CasterFactory
3133 {
32- return new CasterFactory ()
34+ $ casterFactory = new CasterFactory ();
35+
36+ $ casterFactory
3337 ->addCaster ('array ' , JsonToArrayCaster::class)
3438 ->addCaster ('bool ' , BooleanCaster::class)
3539 ->addCaster ('boolean ' , BooleanCaster::class)
3640 ->addCaster ('int ' , IntegerCaster::class)
3741 ->addCaster ('integer ' , IntegerCaster::class)
3842 ->addCaster ('float ' , FloatCaster::class)
3943 ->addCaster ('double ' , FloatCaster::class)
40- ->addCaster (fn (PropertyReflector $ property ) => $ property ->getIterableType () !== null , fn (PropertyReflector $ property ) => new ArrayToObjectCollectionCaster ($ property ))
44+ ->addCaster ('string ' , StringCaster::class)
45+ ->addCaster (
46+ fn (PropertyReflector $ property ) => $ property ->getIterableType () !== null ,
47+ fn (PropertyReflector $ property ) => new ArrayToObjectCollectionCaster ($ property , $ casterFactory ),
48+ )
4149 ->addCaster (fn (PropertyReflector $ property ) => $ property ->getType ()->isClass (), fn (PropertyReflector $ property ) => new ObjectCaster ($ property ->getType ()))
50+ ->addCaster (fn (PropertyReflector $ property ) => $ property ->getType ()->isUnion (), fn (PropertyReflector $ property ) => new UnionCaster ($ property ))
4251 ->addCaster (UnitEnum::class, fn (PropertyReflector $ property ) => new EnumCaster ($ property ->getType ()->getName ()))
4352 ->addCaster (DateTimeInterface::class, DateTimeCaster::fromProperty (...))
4453 ->addCaster (NativeDateTimeImmutable::class, NativeDateTimeCaster::fromProperty (...))
4554 ->addCaster (NativeDateTime::class, NativeDateTimeCaster::fromProperty (...))
4655 ->addCaster (NativeDateTimeInterface::class, NativeDateTimeCaster::fromProperty (...))
4756 ->addCaster (DateTime::class, DateTimeCaster::fromProperty (...));
57+
58+ return $ casterFactory ;
4859 }
4960}
0 commit comments