Skip to content

Commit

Permalink
[#90] Add EXPERIMENTAL edn packer reader opts
Browse files Browse the repository at this point in the history
  • Loading branch information
ptaoussanis committed Nov 16, 2014
1 parent 1cb33a7 commit 6e0e624
Showing 1 changed file with 19 additions and 3 deletions.
22 changes: 19 additions & 3 deletions src/taoensso/sente/interfaces.cljx
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,27 @@
(pack [_ x])
(unpack [_ x]))

(deftype EdnPacker []
(deftype EdnPacker [clj-opts cljs-opts] ; Opts are EXPERIMENTAL
IPacker
(pack [_ x] (pr-str x))
(unpack [_ s] (edn/read-string s)))
;; (unpack [_ s] (edn/read-string s)) ; Without opts
(unpack [_ s]
#+clj (edn/read-string (:reader-opts clj-opts) s)
#+cljs
(let [{:keys [reader-tag-table default-data-reader-fn]} cljs-opts]
(if (and (nil? reader-tag-table) (nil? default-data-reader-fn))
(edn/read-string s)
(binding [cljs.reader/*tag-table*
(if-let [nv reader-tag-table]
(do (assert (instance? Atom nv)) nv)
cljs.reader/*tag-table*)

(def edn-packer "Default Edn packer." (->EdnPacker))
cljs.reader/*default-data-reader-fn*
(if-let [nv default-data-reader-fn]
(do (assert (instance? Atom nv)) nv)
cljs.reader/*default-data-reader-fn*)]
(edn/read-string s))))))

(def edn-packer "Default Edn packer." (->EdnPacker {} {}))
(defn coerce-packer [x] (if (= x :edn) edn-packer
(do (assert (satisfies? IPacker x)) x)))

0 comments on commit 6e0e624

Please sign in to comment.