-
-
Notifications
You must be signed in to change notification settings - Fork 63
/
http.cljc
37 lines (31 loc) · 1.2 KB
/
http.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
(ns com.wsscode.pathom.diplomat.http
(:require [clojure.spec.alpha :as s]))
(s/def ::encode-type (s/with-gen keyword? #(s/gen #{::transit+json ::edn ::json})))
(s/def ::url string?)
(s/def ::method #{::get ::head ::post ::put ::patch ::delete ::connect ::options})
(s/def ::headers (s/map-of string? string?))
(s/def ::content-type (s/or :pre-defined ::encode-type :raw string?))
(s/def ::accept (s/or :pre-defined ::encode-type :raw string?))
(s/def ::as ::encode-type)
(s/def ::form-params any?)
(s/def ::debug? boolean?)
(s/def ::body any?)
(s/def ::request (s/keys :req [::url]
:opt [::method
::headers
::content-type
::accept
::as
::debug?]))
(s/def ::response (s/keys :req [::headers]
:opt [::body]))
(defn request
([{::keys [driver] :as request}]
(driver request))
([{::keys [driver] :as request} url]
(driver (assoc request ::url url)))
([{::keys [driver] :as request} url config]
(driver (merge request {::url url} config))))
(s/fdef request
:args (s/cat :req ::request)
:ret ::response)