spec.clj

Branches > refactor/use-spec-1 > da5bbf0 > files / src / dev / grahp / spec.clj

(ns dev.grahp.spec
  (:refer-clojure :exclude [def])
  (:require
   [clojure.alpha.spec :as s]
   [dev.grahp.error :refer [raise]]))

(defn ensure-conform [spec x]
  (if (s/valid? spec x)
    (s/conform spec x)
    (raise "Failed to conform value to spec!" {:spec spec :x x})))

(defmacro def
  "Same as clojure.alpha.spec/def but allows for a docstring seriously how does spec def not have a docstring???"
  {:clj-kondo/lint-as 'clojure.spec.alpha/def}
  ([name spec] `(s/def ~name ~spec))
  ([name _docstring spec] `(s/def ~name ~spec)))