reitit/examples/just-coercion-with-ring/src/example/spec.clj

23 lines
654 B
Clojure
Raw Normal View History

2017-12-03 15:43:57 +00:00
(ns example.spec
(:require [clojure.spec.alpha :as s]
[spec-tools.spec :as spec]
2017-12-09 21:21:03 +00:00
[reitit.coercion.spec :as spec-coercion]
2018-06-10 20:10:46 +00:00
[example.middleware :as middleware]))
2017-12-03 15:43:57 +00:00
;; wrap into Spec Records to enable runtime conforming
(s/def ::x spec/int?)
(s/def ::y spec/int?)
(s/def ::request (s/keys :req-un [::x ::y]))
;; read coerced parameters under :parameters
(defn handler [{{{:keys [x y]} :query} :parameters}]
{:status 200
:body {:result (+ x y)
:source :spec}})
(def app
(-> #'handler
2018-06-10 20:10:46 +00:00
(middleware/wrap-coercion
2017-12-03 15:43:57 +00:00
{:parameters {:query ::request}
:coercion spec-coercion/coercion})))