-
Notifications
You must be signed in to change notification settings - Fork 1
/
jetty.clj
75 lines (51 loc) · 1.43 KB
/
jetty.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
68
69
70
71
72
73
74
75
(ns farseer.jetty
(:require
[farseer.config :as config]
[farseer.http :as http]
[farseer.spec.jetty :as spec.jetty]
[ring.adapter.jetty :refer [run-jetty]]
[clojure.spec.alpha :as s])
(:import
org.eclipse.jetty.server.Server))
(def defaults
{:jetty/port 8080
:jetty/join? false})
(defn ^Server start-server
([config]
(start-server config nil))
([config context]
(let [config
(->> defaults
(config/rebase config)
(s/assert ::spec.jetty/config))
app
(http/make-app config context)
jetty-opt
(config/query-keys config "jetty")]
(run-jetty app jetty-opt))))
(defn stop-server [server]
(.stop ^Server server))
(defmacro with-server
[[config & [context]] & body]
`(let [server# (start-server ~config ~context)]
(try
~@body
(finally
(stop-server server#)))))
(defn component
([config]
(component config nil))
([config context]
(with-meta {}
{'com.stuartsierra.component/start
(fn [{:as this :jetty/keys [server]}]
(if server
this
(let [context (merge context this)
server (start-server config context)]
(assoc this :jetty/server server))))
'com.stuartsierra.component/stop
(fn [{:as this :jetty/keys [server]}]
(when server
(stop-server server)
(dissoc this :jetty/server)))})))