/
response.clj
46 lines (37 loc) · 1018 Bytes
/
response.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
(ns compojure.response
"Methods for generating Ring response maps"
(:use [ring.util.response :only (response header)])
(:import [java.io File InputStream]
[clojure.lang APersistentMap IDeref IFn ISeq]))
(defprotocol Renderable
(render [this request]
"Render the object into a form suitable for the given request map."))
(extend-type nil
Renderable
(render [_ _] nil))
(extend-type String
Renderable
(render [this _]
(-> (response this)
(header "Content-Type" "text/html"))))
(extend-type APersistentMap
Renderable
(render [this _]
(merge (response "") this)))
(extend-type IFn
Renderable
(render [this request]
(render (this request) request)))
(extend-type IDeref
Renderable
(render [this request]
(render (deref this) request)))
(extend-type File
Renderable
(render [this _] (response this)))
(extend-type ISeq
Renderable
(render [this _] (response this)))
(extend-type InputStream
Renderable
(render [this _] (response this)))