@@ -922,16 +922,35 @@ func (schema *Schema) visitSetOperations(settings *schemaValidationSettings, val
922
922
if valuemap , okcheck := value .(map [string ]interface {}); okcheck {
923
923
discriminatorVal , okcheck := valuemap [pn ]
924
924
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
+ }
926
930
}
927
931
928
932
discriminatorValString , okcheck := discriminatorVal .(string )
929
933
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
+ }
931
945
}
932
946
933
947
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
+ }
935
954
}
936
955
}
937
956
}
0 commit comments