When a request fails spec validation, explain-data should use the coerced value for problems identification:
;;in compojure.api.coercion.spec
(coerce-request [_ spec value type format _]
(let [spec (maybe-memoized-specify spec)
type-options (options type)]
(if-let [transformer (or (get (get type-options :formats) format)
(get type-options :default))]
(let [coerced (st/coerce spec value transformer)]
(if (s/valid? spec coerced)
coerced
;; st/conform should be called with "coerced" instead of "value"?
(let [conformed (st/conform spec value transformer)]
(if (s/invalid? conformed)
;; st/explain-data should be called with "coerced" instead of "value"?
(let [problems (st/explain-data spec value transformer)]
(cc/map->CoercionError
{:spec spec
:problems problems}))
(s/unform spec conformed)))))
value)))
schema coercion apparently uses the coerced value:
;; in compojure.api.coercion.schema
(let [coerce (memoized-coercer schema matcher)
coerced (coerce value)]
(if (su/error? coerced)
(let [errors (su/error-val coerced)] ;;error-val is called on top of coerced val
(cc/map->CoercionError
{:schema schema
:errors errors}))
coerced))
Library Version(s)
2.0.0-alpha28
Problem
When a request fails spec validation,
explain-data
should use thecoerced
value for problems identification:schema
coercion apparently uses the coerced value:I'm happy to submit a PR if required.