/
client.clj
67 lines (52 loc) · 2 KB
/
client.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
(ns exoscale.telex.client
(:require [exoscale.telex.enum :as enum])
(:import (java.net.http HttpClient$Builder)
(java.net.http HttpClient)
(java.time Duration)))
(defmulti set-option! (fn [k _builder _option] k))
(defmethod set-option! :exoscale.telex.client/authenticator
[_ ^HttpClient$Builder b authenticator]
(.authenticator b authenticator))
(defmethod set-option! :exoscale.telex.client/connect-timeout
[_ ^HttpClient$Builder b timeout-ms]
(.connectTimeout b (Duration/ofMillis timeout-ms)))
(defmethod set-option! :exoscale.telex.client/cookie-handler
[_ ^HttpClient$Builder b cookie-handler]
(.cookieHandler b cookie-handler))
(defmethod set-option! :exoscale.telex.client/executor
[_ ^HttpClient$Builder b executor]
(.executor b executor))
(defmethod set-option! :exoscale.telex.client/follow-redirects
[_ ^HttpClient$Builder b follow-redirects]
(.followRedirects b (enum/redirect follow-redirects)))
(defmethod set-option! :exoscale.telex.client/priority
[_ ^HttpClient$Builder b priority]
(.priority b (int priority)))
(defmethod set-option! :exoscale.telex.client/proxy
[_ ^HttpClient$Builder b proxy-selector]
(.proxy b proxy-selector))
(defmethod set-option! :exoscale.telex.client/ssl-context
[_ ^HttpClient$Builder b ssl-context]
(.sslContext b ssl-context))
(defmethod set-option! :exoscale.telex.client/ssl-parameters
[_ ^HttpClient$Builder b ssl-parameters]
(.sslParameters b ssl-parameters))
(defmethod set-option! :exoscale.telex.client/version
[_ ^HttpClient$Builder b version]
(.version b (enum/version version)))
(defmethod set-option! :default
[_ b _]
b)
(defn set-options!
[builder options]
(reduce (fn [builder [k option]]
(set-option! k builder option))
builder
options))
(def default-options
#:exoscale.telex.client{:follow-redirects :normal
:version :http-1-1})
(defn build [{:as options}]
(let [b (HttpClient/newBuilder)]
(set-options! b options)
(.build b)))