forked from metosin/ring-swagger
-
Notifications
You must be signed in to change notification settings - Fork 0
/
json.clj
50 lines (39 loc) · 1.41 KB
/
json.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
(ns ring.swagger.json
(:require [cheshire.generate :refer [add-encoder]]
[schema.utils :as su]
[ring.swagger.coerce :as coerce]
[ring.swagger.extension :as extension])
(:import [com.fasterxml.jackson.core JsonGenerator]
[schema.utils ValidationError]
[java.util Date]
[java.util.regex Pattern]
[org.joda.time DateTime LocalDate LocalTime]))
(defn date-time-encoder [x ^JsonGenerator jg]
(.writeString jg (coerce/unparse-date-time x)))
;;
;; JSON Encoders
;;
(add-encoder ValidationError
(fn [x ^JsonGenerator jg]
(.writeString jg (str (su/validation-error-explain x)))))
(add-encoder Date date-time-encoder)
(add-encoder DateTime date-time-encoder)
(add-encoder LocalDate
(fn [x ^JsonGenerator jg]
(.writeString jg (coerce/unparse-date x))))
(add-encoder LocalTime
(fn [x ^JsonGenerator jg]
(.writeString jg (coerce/unparse-time x))))
(add-encoder Pattern
(fn [x ^JsonGenerator jg]
(.writeString jg (coerce/unparse-pattern x))))
(extension/java-time
(add-encoder java.time.Instant
(fn [^java.time.Instant x ^JsonGenerator jg]
(.writeString jg (.toString x))))
(add-encoder java.time.LocalDate
(fn [^java.time.LocalDate x ^JsonGenerator jg]
(.writeString jg (.toString x))))
(add-encoder java.time.LocalTime
(fn [^java.time.LocalTime x ^JsonGenerator jg]
(.writeString jg (.toString x)))))