[#122] Option to disable freezing and/or thawing of metadata
This commit is contained in:
parent
8f71638a19
commit
db71943a5b
2 changed files with 45 additions and 6 deletions
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
;;;; TODO
|
||||
;; - Performance would benefit from ^:static support / direct linking / etc.
|
||||
;; - Ability to compile out metadata support?
|
||||
;; - Auto cache keywords? When map keys? Configurable? Per-map
|
||||
;; (`cache-keys`)? Just rely on compression?
|
||||
|
||||
|
|
@ -281,6 +280,8 @@
|
|||
nil => default"
|
||||
nil)
|
||||
|
||||
(enc/defonce ^:dynamic *incl-metadata?* "Include metadata when freezing/thawing?" true)
|
||||
|
||||
(def default-serializable-whitelist
|
||||
"PRs welcome to add additional known-safe classes to default."
|
||||
#{"[I" "[F" "[Z" "[B" "[C" "[D" "[S" "[J"
|
||||
|
|
@ -475,7 +476,7 @@
|
|||
(extend-protocol IFreezable2 ; Must be a separate protocol
|
||||
clojure.lang.IMeta
|
||||
(-freeze-with-meta! [x ^DataOutput data-output]
|
||||
(let [m (.meta x)]
|
||||
(let [m (when *incl-metadata?* (.meta x))]
|
||||
(when m
|
||||
(write-id data-output id-meta)
|
||||
(-freeze-without-meta! m data-output)))
|
||||
|
|
@ -1168,7 +1169,8 @@
|
|||
(opt->bindings :freeze-fallback #'*freeze-fallback*)
|
||||
(opt->bindings :auto-freeze-compressor #'*auto-freeze-compressor*)
|
||||
(opt->bindings :serializable-whitelist #'*serializable-whitelist*)
|
||||
(opt->bindings :custom-readers #'*custom-readers*))]
|
||||
(opt->bindings :custom-readers #'*custom-readers*)
|
||||
(opt->bindings :incl-metadata? #'*incl-metadata?*))]
|
||||
|
||||
(if-not bindings
|
||||
(f) ; Common case
|
||||
|
|
@ -1204,7 +1206,7 @@
|
|||
types, extend the Clojure reader or see `extend-freeze`."
|
||||
([x] (freeze x nil))
|
||||
([x {:as opts
|
||||
:keys [compressor encryptor password serializable-whitelist]
|
||||
:keys [compressor encryptor password serializable-whitelist incl-metadata?]
|
||||
:or {compressor :auto
|
||||
encryptor aes128-gcm-encryptor}}]
|
||||
|
||||
|
|
@ -1472,7 +1474,9 @@
|
|||
id-false false
|
||||
id-char (.readChar in)
|
||||
id-meta (let [m (thaw-from-in! in)]
|
||||
(with-meta (thaw-from-in! in) m))
|
||||
(if *incl-metadata?*
|
||||
(with-meta (thaw-from-in! in) m)
|
||||
(do (thaw-from-in! in))))
|
||||
|
||||
id-cached-0 (thaw-cached 0 in)
|
||||
id-cached-1 (thaw-cached 1 in)
|
||||
|
|
@ -1656,7 +1660,7 @@
|
|||
([^bytes ba
|
||||
{:as opts
|
||||
:keys [v1-compatibility? compressor encryptor password
|
||||
serializable-whitelist]
|
||||
serializable-whitelist incl-metadata?]
|
||||
:or {compressor :auto
|
||||
encryptor :auto}}]
|
||||
|
||||
|
|
|
|||
|
|
@ -296,6 +296,41 @@
|
|||
(is (= nippy/*serializable-whitelist* #{"base.1" "base.2" "add.1" "add.2"})
|
||||
"JVM properties override initial serializable-whitelist value"))
|
||||
|
||||
|
||||
;;;; Metadata
|
||||
|
||||
(deftest _metadata
|
||||
|
||||
(is
|
||||
(:has-meta?
|
||||
(meta
|
||||
(nippy/thaw
|
||||
(nippy/freeze (with-meta [] {:has-meta? true}) {:incl-metadata? true})
|
||||
{:incl-metadata? true}
|
||||
)))
|
||||
|
||||
"Metadata successfully included")
|
||||
|
||||
(is
|
||||
(nil?
|
||||
(meta
|
||||
(nippy/thaw
|
||||
(nippy/freeze (with-meta [] {:has-meta? true}) {:incl-metadata? true})
|
||||
{:incl-metadata? false}
|
||||
)))
|
||||
|
||||
"Metadata successfully excluded by thaw")
|
||||
|
||||
(is
|
||||
(nil?
|
||||
(meta
|
||||
(nippy/thaw
|
||||
(nippy/freeze (with-meta [] {:has-meta? true}) {:incl-metadata? false})
|
||||
{:incl-metadata? true}
|
||||
)))
|
||||
|
||||
"Metadata successfully excluded by freeze"))
|
||||
|
||||
;;;; Benchmarks
|
||||
|
||||
(deftest _benchmarks
|
||||
|
|
|
|||
Loading…
Reference in a new issue