-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema.cljc
41 lines (33 loc) · 827 Bytes
/
schema.cljc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(ns quark.spec.schema
(:refer-clojure :exclude [defn Keyword])
(:require [quark.spec.defn :as defn]
[quark.spec.impl :as impl]
[clojure.core :as core]))
(def Int integer?)
(def Num number?)
(def Str string?)
(def Keyword keyword?)
(def Any any?)
(def Bool boolean?)
(def Char #?(:clj Character :cljs Str))
(defmacro defn
[& args]
(binding [defn/*cljs?* (-> &env :ns some?)]
(apply defn/defn-spec-helper args)))
(defmacro either
[& schemas]
(let [args (impl/either-args schemas)]
(binding [defn/*cljs?* (-> &env :ns some?)]
`(or ~@args))))
(defmacro maybe
[& schemas]
`(nilable ~@schemas))
(def pred
identity)
(defmacro constrained
[& schemas]
(binding [defn/*cljs?* (-> &env :ns some?)]
`(s/and ~@schemas)))
(core/defn protocol
[p]
#(satisfies? p %))