Move Reader fallback out of Freezable protocol to make protocol extensible

This commit is contained in:
Peter Taoussanis 2013-07-29 15:11:20 +07:00
parent 69611657c7
commit 8e4cc072e3

View file

@ -83,7 +83,11 @@
(when-let [m# (meta x#)] (when-let [m# (meta x#)]
(write-id s# ~id-meta) (write-id s# ~id-meta)
(freeze-to-stream* m# s#)) (freeze-to-stream* m# s#))
(freeze-to-stream* x# s#))) (try (freeze-to-stream* x# s#)
(catch java.lang.IllegalArgumentException _#
;; Use Clojure reader as final fallback (after custom extensions)
(write-id s# id-reader)
(write-bytes s# (.getBytes (pr-str x#) "UTF-8"))))))
(defn freeze-to-stream! (defn freeze-to-stream!
"Low-level API. Serializes arg (any Clojure data type) to a DataOutputStream." "Low-level API. Serializes arg (any Clojure data type) to a DataOutputStream."
@ -154,9 +158,6 @@
(write-biginteger s (.numerator x)) (write-biginteger s (.numerator x))
(write-biginteger s (.denominator x))) (write-biginteger s (.denominator x)))
;; Use Clojure's own reader as final fallback
(freezer Object id-reader (write-bytes s (.getBytes (pr-str x) "UTF-8")))
(def ^:private head-meta-id (reduce-kv #(assoc %1 %3 %2) {} head-meta)) (def ^:private head-meta-id (reduce-kv #(assoc %1 %3 %2) {} head-meta))
(defn- wrap-header [data-ba metadata] (defn- wrap-header [data-ba metadata]