Housekeeping, add test for records with custom extension
This commit is contained in:
parent
f3b524421b
commit
a76734a25a
2 changed files with 16 additions and 14 deletions
|
|
@ -2,12 +2,11 @@
|
||||||
"Simple, high-performance Clojure serialization library. Originally adapted
|
"Simple, high-performance Clojure serialization library. Originally adapted
|
||||||
from Deep-Freeze."
|
from Deep-Freeze."
|
||||||
{:author "Peter Taoussanis"}
|
{:author "Peter Taoussanis"}
|
||||||
(:require [taoensso.nippy
|
(:require [clojure.tools.reader.edn :as edn]
|
||||||
|
[taoensso.nippy
|
||||||
(utils :as utils)
|
(utils :as utils)
|
||||||
(compression :as compression :refer (snappy-compressor))
|
(compression :as compression :refer (snappy-compressor))
|
||||||
(encryption :as encryption :refer (aes128-encryptor))]
|
(encryption :as encryption :refer (aes128-encryptor))])
|
||||||
[clojure.tools.reader
|
|
||||||
(edn :as edn)])
|
|
||||||
(:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream
|
(:import [java.io DataInputStream DataOutputStream ByteArrayOutputStream
|
||||||
ByteArrayInputStream]
|
ByteArrayInputStream]
|
||||||
[java.lang.reflect Method]
|
[java.lang.reflect Method]
|
||||||
|
|
@ -110,7 +109,6 @@
|
||||||
(binding [*print-dup* print-dup?] ; Expensive
|
(binding [*print-dup* print-dup?] ; Expensive
|
||||||
(freeze-to-stream data-output-stream x))))
|
(freeze-to-stream data-output-stream x))))
|
||||||
|
|
||||||
|
|
||||||
(defmacro ^:private freezer
|
(defmacro ^:private freezer
|
||||||
"Helper to extend Freezable protocol."
|
"Helper to extend Freezable protocol."
|
||||||
[type id & body]
|
[type id & body]
|
||||||
|
|
@ -323,7 +321,7 @@
|
||||||
"Deserializes a frozen object from given byte array to its original Clojure
|
"Deserializes a frozen object from given byte array to its original Clojure
|
||||||
data type. Supports data frozen with current and all previous versions of
|
data type. Supports data frozen with current and all previous versions of
|
||||||
Nippy. For custom types extend the Clojure reader or see `extend-thaw`."
|
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}
|
:or {legacy-opts {:compressed? true}
|
||||||
compressor snappy-compressor
|
compressor snappy-compressor
|
||||||
encryptor aes128-encryptor}
|
encryptor aes128-encryptor}
|
||||||
|
|
|
||||||
|
|
@ -30,16 +30,20 @@
|
||||||
(thaw (org.iq80.snappy.Snappy/uncompress iq80-ba 0 (alength iq80-ba)))
|
(thaw (org.iq80.snappy.Snappy/uncompress iq80-ba 0 (alength iq80-ba)))
|
||||||
(thaw (org.iq80.snappy.Snappy/uncompress xerial-ba 0 (alength xerial-ba))))))
|
(thaw (org.iq80.snappy.Snappy/uncompress xerial-ba 0 (alength xerial-ba))))))
|
||||||
|
|
||||||
;;; Records
|
;;; Records (reflecting)
|
||||||
(defrecord RecordType [data])
|
(defrecord MyRec [data])
|
||||||
(expect RecordType (thaw (freeze (RecordType. "Joe"))))
|
(expect (let [rec (->MyRec "val")] (= rec (thaw (freeze rec)))))
|
||||||
(expect (RecordType. "Joe") (thaw (freeze (RecordType. "Joe"))))
|
|
||||||
|
|
||||||
;;; Custom types
|
;;; Custom types
|
||||||
(defrecord MyType [data])
|
(defrecord MyType [data])
|
||||||
(nippy/extend-freeze MyType 1 [x s] (.writeUTF s (:data x)))
|
(nippy/extend-freeze MyType 1 [x s] (.writeUTF s (:data x)))
|
||||||
(expect Exception (thaw (freeze (->MyType "Joe"))))
|
(expect Exception (thaw (freeze (->MyType "val"))))
|
||||||
(expect (MyType. "Joe") (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s)))
|
(expect (do (nippy/extend-thaw 1 [s] (->MyType (.readUTF s)))
|
||||||
(thaw (freeze (->MyType "Joe")))))
|
(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
|
(expect (benchmarks/bench {:reader? false})) ; Also tests :cached passwords
|
||||||
Loading…
Reference in a new issue