/
adapt.clj
38 lines (31 loc) · 956 Bytes
/
adapt.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
(ns clj-service.adapt
(:require [clj-service.time]
[schema.core :as s]
[cheshire.core :as cheshire]
[clj-service.schema :as schema]))
(defmulti externalize (fn [format & args] format))
(defmethod externalize :json
([format data & [schema]]
(-> data
(schema/coerce-if schema)
cheshire/generate-string)))
(defmethod externalize :edn
[format data & [schema]]
(-> data
(schema/coerce-if schema)
pr-str))
(defmulti internalize (fn [format & args] format))
(defmethod internalize :json
[format data & [schema]]
(-> data
(cheshire/parse-string true)
(schema/coerce-if schema)))
(defmethod internalize :edn
[format data & [schema]]
(-> data
read-string
(schema/coerce-if schema)))
(def from-json (partial internalize :json))
(def from-edn (partial internalize :edn))
(def to-json (partial externalize :json))
(def to-edn (partial externalize :edn))