-
-
Notifications
You must be signed in to change notification settings - Fork 63
/
http.cljc
54 lines (44 loc) · 1.62 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
(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
::form-params
::debug?
::body]))
(s/def ::response (s/keys :req [::status]
:opt [::headers
::body]))
(s/def ::driver fn?)
(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)
(defn request-method [{::keys [method form-params]}]
(or (some-> method name)
(if form-params "post" "get")))
(defn encode-type->header [encode-type]
(cond
(string? encode-type)
encode-type
(keyword? encode-type)
(str "application/" (name encode-type))))