diff --git a/src/taoensso/nippy.clj b/src/taoensso/nippy.clj index 0d5773d..e8bcd92 100644 --- a/src/taoensso/nippy.clj +++ b/src/taoensso/nippy.clj @@ -2,12 +2,11 @@ "Simple, high-performance Clojure serialization library. Originally adapted from Deep-Freeze." {:author "Peter Taoussanis"} - (:require [taoensso.nippy + (:require [clojure.tools.reader.edn :as edn] + [taoensso.nippy (utils :as utils) (compression :as compression :refer (snappy-compressor)) - (encryption :as encryption :refer (aes128-encryptor))] - [clojure.tools.reader - (edn :as edn)]) + (encryption :as encryption :refer (aes128-encryptor))]) (:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream ByteArrayInputStream] [java.lang.reflect Method] @@ -110,7 +109,6 @@ (binding [*print-dup* print-dup?] ; Expensive (freeze-to-stream data-output-stream x)))) - (defmacro ^:private freezer "Helper to extend Freezable protocol." [type id & body] @@ -323,7 +321,7 @@ "Deserializes a frozen object from given byte array to its original Clojure data type. Supports data frozen with current and all previous versions of Nippy. For custom types extend the Clojure reader or see `extend-thaw`." - [^bytes ba & [{:keys [password compressor encryptor legacy-opts readers] + [^bytes ba & [{:keys [password compressor encryptor legacy-opts] :or {legacy-opts {:compressed? true} compressor snappy-compressor encryptor aes128-encryptor} @@ -483,4 +481,4 @@ [ba & {:keys [compressed?] :or {compressed? true}}] (thaw ba {:legacy-opts {:compressed? compressed?} - :password nil})) \ No newline at end of file + :password nil})) diff --git a/test/taoensso/nippy/tests/main.clj b/test/taoensso/nippy/tests/main.clj index 8ec9c7a..a9d0344 100644 --- a/test/taoensso/nippy/tests/main.clj +++ b/test/taoensso/nippy/tests/main.clj @@ -30,16 +30,20 @@ (thaw (org.iq80.snappy.Snappy/uncompress iq80-ba 0 (alength iq80-ba))) (thaw (org.iq80.snappy.Snappy/uncompress xerial-ba 0 (alength xerial-ba)))))) -;;; Records -(defrecord RecordType [data]) -(expect RecordType (thaw (freeze (RecordType. "Joe")))) -(expect (RecordType. "Joe") (thaw (freeze (RecordType. "Joe")))) +;;; Records (reflecting) +(defrecord MyRec [data]) +(expect (let [rec (->MyRec "val")] (= rec (thaw (freeze rec))))) ;;; Custom types (defrecord MyType [data]) (nippy/extend-freeze MyType 1 [x s] (.writeUTF s (:data x))) -(expect Exception (thaw (freeze (->MyType "Joe")))) -(expect (MyType. "Joe") (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s))) - (thaw (freeze (->MyType "Joe"))))) +(expect Exception (thaw (freeze (->MyType "val")))) +(expect (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s))) + (let [type (->MyType "val")] (= type (thaw (freeze type)))))) + +;;; Records (extend) +(expect (do (nippy/extend-freeze MyRec 2 [x s] (.writeUTF s (str "fast-" (:data x)))) + (nippy/extend-thaw 2 [s] (->MyRec (.readUTF s))) + (= (->MyRec "fast-val") (thaw (freeze (->MyRec "val")))))) (expect (benchmarks/bench {:reader? false})) ; Also tests :cached passwords \ No newline at end of file