Skip to content

Commit

Permalink
Merge pull request #21 from r0man/edn-opts
Browse files Browse the repository at this point in the history
Make EDN serde configurable
  • Loading branch information
Matt Searle committed Jan 4, 2019
2 parents 9996ea9 + c75e945 commit 1319db6
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
15 changes: 9 additions & 6 deletions src/jackdaw/serdes/edn.clj
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,15 @@

(defn deserializer
"Returns an EDN deserializer."
[]
(jsfn/new-deserializer {:deserialize (fn [_ _ data]
(-> (from-bytes data)
clojure.edn/read-string))}))
([]
(deserializer {}))
([opts]
(let [opts (into {} opts)]
(jsfn/new-deserializer {:deserialize (fn [_ _ data]
(->> (from-bytes data)
(clojure.edn/read-string opts)))}))))

(defn serde
"Returns an EDN serde."
[]
(Serdes/serdeFrom (serializer) (deserializer)))
[& [opts]]
(Serdes/serdeFrom (serializer) (deserializer opts)))
15 changes: 14 additions & 1 deletion test/jackdaw/serdes/edn_test.clj
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
(ns jackdaw.serdes.edn-test
(:require [clojure.test :refer :all]
(:require [clojure.spec.alpha :as s]
[clojure.test :refer :all]
[clojure.test.check.clojure-test :refer [defspec]]
[clojure.test.check.generators :as gen]
[clojure.test.check.properties :as prop]
Expand All @@ -18,3 +19,15 @@
(is (= (seq bytes)
(seq (->> (.deserialize (jse/deserializer) nil bytes)
(.serialize (jse/serializer) nil)))))))))

(defmethod print-method java.net.URI
[obj writer]
(.write writer "#jackdaw/uri ")
(.write writer (pr-str (str obj))))

(defspec edn-roundtrip-custom-reader 20
(testing "custom EDN reader"
(let [opts {:readers {'jackdaw/uri #(java.net.URI. %)}}]
(prop/for-all [x (s/gen uri?)]
(is (= x (->> (.serialize (jse/serializer) nil x)
(.deserialize (jse/deserializer opts) nil))))))))

0 comments on commit 1319db6

Please sign in to comment.