@@ -82,10 +82,19 @@ public function cast(mixed $value, Context $context): mixed
8282 */
8383 private function castOverDiscriminator (DiscriminatorMapMetadata $ map , array $ value , Context $ context ): mixed
8484 {
85+ // Default mapping type
86+ $ default = $ map ->getDefaultType ()
87+ ?->getType();
88+
8589 $ field = $ map ->getField ();
8690
8791 // In case of discriminator field is missing
8892 if (!\array_key_exists ($ field , $ value )) {
93+ // In case of default type is present
94+ if ($ default !== null ) {
95+ return $ default ->cast ($ value , $ context );
96+ }
97+
8998 throw MissingRequiredObjectFieldException::createFromContext (
9099 field: $ field ,
91100 expected: $ map ->getTypeStatement (),
@@ -98,6 +107,11 @@ private function castOverDiscriminator(DiscriminatorMapMetadata $map, array $val
98107
99108 // In case of discriminator field is not a string
100109 if (!\is_string ($ element )) {
110+ // In case of default type is present
111+ if ($ default !== null ) {
112+ return $ default ->cast ($ value , $ context );
113+ }
114+
101115 throw InvalidObjectValueException::createFromContext (
102116 element: $ element ,
103117 field: $ field ,
@@ -111,6 +125,11 @@ private function castOverDiscriminator(DiscriminatorMapMetadata $map, array $val
111125
112126 // In case of discriminator value is not found
113127 if ($ mapping === null ) {
128+ // In case of default type is present
129+ if ($ default !== null ) {
130+ return $ default ->cast ($ value , $ context );
131+ }
132+
114133 throw InvalidObjectValueException::createFromContext (
115134 element: $ element ,
116135 field: $ field ,
0 commit comments