-
-
Notifications
You must be signed in to change notification settings - Fork 42
/
clj_http.clj
30 lines (24 loc) · 1.33 KB
/
clj_http.clj
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
(ns martian.clj-http
(:require [clj-http.client :as http]
[martian.core :as martian]
[martian.interceptors :as interceptors]
[martian.openapi :refer [openapi-schema?] :as openapi])
(:import [java.io ByteArrayInputStream]))
(def perform-request
{:name ::perform-request
:leave (fn [{:keys [request] :as ctx}]
(assoc ctx :response (http/request request)))})
(def default-interceptors
(concat martian/default-interceptors [interceptors/default-encode-body interceptors/default-coerce-response perform-request]))
(def default-opts {:interceptors default-interceptors})
(defn bootstrap [api-root concise-handlers & [opts]]
(martian/bootstrap api-root concise-handlers (merge default-opts opts)))
(defn bootstrap-openapi [url & [opts get-swagger-opts]]
(let [definition (:body (http/get url (merge {:as :json} get-swagger-opts)))
{:keys [scheme server-name server-port]} (http/parse-url url)
base-url (format "%s://%s%s%s" (name scheme) server-name (if server-port (str ":" server-port) "")
(if (openapi-schema? definition)
(openapi/base-url definition)
(get definition :basePath "")))]
(martian/bootstrap-openapi base-url definition (merge default-opts opts))))
(def bootstrap-swagger bootstrap-openapi)