NB switch to encore edn reader/writer

This commit is contained in:
Peter Taoussanis 2015-06-28 13:47:58 +07:00
parent 12d90a05f8
commit 11545690c8
4 changed files with 16 additions and 19 deletions

View file

@ -14,7 +14,7 @@
:dependencies :dependencies
[[org.clojure/clojure "1.4.0"] [[org.clojure/clojure "1.4.0"]
[org.clojure/tools.reader "0.9.2"] [org.clojure/tools.reader "0.9.2"]
[com.taoensso/encore "1.32.0"] [com.taoensso/encore "1.38.0"]
[org.iq80.snappy/snappy "0.3"] [org.iq80.snappy/snappy "0.3"]
[org.tukaani/xz "1.5"] [org.tukaani/xz "1.5"]
[net.jpountz.lz4/lz4 "1.3"]] [net.jpountz.lz4/lz4 "1.3"]]

View file

@ -2,8 +2,7 @@
"High-performance JVM Clojure serialization library. Originally adapted from "High-performance JVM Clojure serialization library. Originally adapted from
Deep-Freeze." Deep-Freeze."
{:author "Peter Taoussanis"} {:author "Peter Taoussanis"}
(:require [clojure.tools.reader.edn :as edn] (:require [taoensso.encore :as encore]
[taoensso.encore :as encore]
[taoensso.nippy [taoensso.nippy
(utils :as utils) (utils :as utils)
(compression :as compression) (compression :as compression)
@ -21,7 +20,7 @@
;;;; Encore version check ;;;; Encore version check
(let [min-encore-version 1.28] ; For `backport-run!` support (let [min-encore-version 1.38]
(if-let [assert! (ns-resolve 'taoensso.encore 'assert-min-encore-version)] (if-let [assert! (ns-resolve 'taoensso.encore 'assert-min-encore-version)]
(assert! min-encore-version) (assert! min-encore-version)
(throw (throw
@ -79,7 +78,7 @@
(def ^:const id-bytes (int 2)) (def ^:const id-bytes (int 2))
(def ^:const id-nil (int 3)) (def ^:const id-nil (int 3))
(def ^:const id-boolean (int 4)) (def ^:const id-boolean (int 4))
(def ^:const id-reader (int 5)) ; Fallback #2: pr-str output (def ^:const id-reader (int 5)) ; Fallback #2
(def ^:const id-serializable (int 6)) ; Fallback #1 (def ^:const id-serializable (int 6)) ; Fallback #1
(def ^:const id-char (int 10)) (def ^:const id-char (int 10))
@ -325,7 +324,7 @@
(def ^:dynamic *final-freeze-fallback* "Alpha - subject to change." nil) (def ^:dynamic *final-freeze-fallback* "Alpha - subject to change." nil)
(defn freeze-fallback-as-str "Alpha-subject to change." [x out] (defn freeze-fallback-as-str "Alpha-subject to change." [x out]
(freeze-to-out* {:nippy/unfreezable (pr-str x) :type (type x)} out)) (freeze-to-out* {:nippy/unfreezable (encore/pr-edn x) :type (type x)} out))
(comment (comment
(require '[clojure.core.async :as async]) (require '[clojure.core.async :as async])
@ -349,13 +348,13 @@
(do (when-debug-mode (do (when-debug-mode
(println (format "DEBUG - Reader fallback: %s" (type x)))) (println (format "DEBUG - Reader fallback: %s" (type x))))
(write-id out id-reader) (write-id out id-reader)
(write-utf8 out (pr-str x))) (write-utf8 out (encore/pr-edn x)))
:else ; Fallback #3: *final-freeze-fallback* :else ; Fallback #3: *final-freeze-fallback*
(if-let [ffb *final-freeze-fallback*] (ffb x out) (if-let [ffb *final-freeze-fallback*] (ffb x out)
(throw (ex-info (format "Unfreezable type: %s %s" (type x) (str x)) (throw (ex-info (format "Unfreezable type: %s %s" (type x) (str x))
{:type (type x) {:type (type x)
:as-str (pr-str x)})))))) :as-str (encore/pr-edn x)}))))))
(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))
(def ^:private get-head-ba (def ^:private get-head-ba
@ -496,7 +495,7 @@
id-reader id-reader
(let [edn (read-utf8 in)] (let [edn (read-utf8 in)]
(try (try
(edn/read-string {:readers *data-readers*} edn) (encore/read-edn {:readers *data-readers*} edn)
(catch Exception e (catch Exception e
{:type :reader {:type :reader
:throwable e :throwable e
@ -581,7 +580,7 @@
id-uuid (UUID. (.readLong in) (.readLong in)) id-uuid (UUID. (.readLong in) (.readLong in))
;;; DEPRECATED ;;; DEPRECATED
id-old-reader (edn/read-string (.readUTF in)) id-old-reader (encore/read-edn (.readUTF in))
id-old-string (.readUTF in) id-old-string (.readUTF in)
id-old-map (apply hash-map (encore/repeatedly-into* [] id-old-map (apply hash-map (encore/repeatedly-into* []
(* 2 (.readInt in)) (thaw-from-in in))) (* 2 (.readInt in)) (thaw-from-in in)))

View file

@ -1,7 +1,6 @@
(ns taoensso.nippy.benchmarks (ns taoensso.nippy.benchmarks
{:author "Peter Taoussanis"} {:author "Peter Taoussanis"}
(:require [clojure.tools.reader.edn :as edn] (:require [clojure.data.fressian :as fressian]
[clojure.data.fressian :as fressian]
[taoensso.encore :as encore] [taoensso.encore :as encore]
[taoensso.nippy :as nippy :refer (freeze thaw)])) [taoensso.nippy :as nippy :refer (freeze thaw)]))
@ -37,8 +36,8 @@
(println (str "\nLap " (inc l) "/" laps "...")) (println (str "\nLap " (inc l) "/" laps "..."))
(when reader? ; Slow (when reader? ; Slow
(println {:reader (bench1 #(pr-str %) #(edn/read-string %) (println {:reader (bench1 encore/pr-edn encore/read-edn
#(count (.getBytes ^String % "UTF-8")))})) #(count (.getBytes ^String % "UTF-8")))}))
(println {:default (bench1 #(freeze % {}) (println {:default (bench1 #(freeze % {})
#(thaw % {}))}) #(thaw % {}))})
@ -59,7 +58,7 @@
(println "\nDone! (Time for cake?)") (println "\nDone! (Time for cake?)")
true) true)
(comment (edn/read-string (pr-str data)) (comment (encore/read-edn (encore/pr-edn data))
(bench1 fressian-freeze fressian-thaw)) (bench1 fressian-freeze fressian-thaw))
(comment (comment

View file

@ -1,8 +1,7 @@
(ns taoensso.nippy.utils (ns taoensso.nippy.utils
{:author "Peter Taoussanis"} {:author "Peter Taoussanis"}
(:require [clojure.string :as str] (:require [clojure.string :as str]
[clojure.tools.reader.edn :as edn] [taoensso.encore :as encore])
[taoensso.encore :as encore])
(:import [java.io ByteArrayInputStream ByteArrayOutputStream Serializable (:import [java.io ByteArrayInputStream ByteArrayOutputStream Serializable
ObjectOutputStream ObjectInputStream])) ObjectOutputStream ObjectInputStream]))
@ -34,7 +33,7 @@
(cast class object) (cast class object)
true))))) true)))))
(def readable? (memoize-type-test (fn [x] (-> x pr-str (edn/read-string)) true))) (def readable? (memoize-type-test (fn [x] (-> x encore/pr-edn encore/read-edn) true)))
(comment (comment
(serializable? "Hello world") (serializable? "Hello world")