@@ -922,16 +922,35 @@ func (schema *Schema) visitSetOperations(settings *schemaValidationSettings, val
922922 if valuemap , okcheck := value .(map [string ]interface {}); okcheck {
923923 discriminatorVal , okcheck := valuemap [pn ]
924924 if ! okcheck {
925- return errors .New ("input does not contain the discriminator property" )
925+ return & SchemaError {
926+ Schema : schema ,
927+ SchemaField : "discriminator" ,
928+ Reason : fmt .Sprintf ("input does not contain the discriminator property %q" , pn ),
929+ }
926930 }
927931
928932 discriminatorValString , okcheck := discriminatorVal .(string )
929933 if ! okcheck {
930- return errors .New ("descriminator value is not a string" )
934+ valStr := "null"
935+ if discriminatorVal != nil {
936+ valStr = fmt .Sprintf ("%v" , discriminatorVal )
937+ }
938+
939+ return & SchemaError {
940+ Value : discriminatorVal ,
941+ Schema : schema ,
942+ SchemaField : "discriminator" ,
943+ Reason : fmt .Sprintf ("value of discriminator property %q is not a string: %v" , pn , valStr ),
944+ }
931945 }
932946
933947 if discriminatorRef , okcheck = schema .Discriminator .Mapping [discriminatorValString ]; len (schema .Discriminator .Mapping ) > 0 && ! okcheck {
934- return errors .New ("input does not contain a valid discriminator value" )
948+ return & SchemaError {
949+ Value : discriminatorVal ,
950+ Schema : schema ,
951+ SchemaField : "discriminator" ,
952+ Reason : fmt .Sprintf ("discriminator property %q has invalid value: %q" , pn , discriminatorVal ),
953+ }
935954 }
936955 }
937956 }
0 commit comments