diff --git a/CHANGELOG.md b/CHANGELOG.md index ddb241f..e1e54d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ Notes: \- [Peter Taoussanis](https://www.taoensso.com) +--- + # `v3.4.1` (2024-05-02) > **Dep**: Nippy is [on Clojars](https://clojars.org/com.taoensso/nippy/versions/3.4.1). diff --git a/README.md b/README.md index 86dbde1..4cc9792 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ Taoensso open source -[**Documentation**](#documentation) | [Latest releases](#latest-releases) | [Get support][GitHub issues] +[**API**][cljdoc docs] | [**Wiki**][GitHub wiki] | [Latest releases](#latest-releases) | [Get support][GitHub issues] # Nippy diff --git a/src/taoensso/nippy.clj b/src/taoensso/nippy.clj index 1ed420e..7dbbae0 100644 --- a/src/taoensso/nippy.clj +++ b/src/taoensso/nippy.clj @@ -25,7 +25,7 @@ PersistentQueue PersistentTreeMap PersistentTreeSet PersistentList MapEntry LazySeq IRecord ISeq IType])) -(enc/assert-min-encore-version [3 112 0]) +(enc/assert-min-encore-version [3 127 0]) (comment (set! *unchecked-math* :warn-on-boxed) @@ -300,14 +300,14 @@ - `payload-spec` examples: - nil ; No spec available (e.g. unpredictable payload) - [] ; Type has no payload - - [[:bytes 4]] ; Type has a payload of exactly 4 bytes - - [[:bytes 2] [:elements 2]] ; Type has a payload of exactly 2 bytes, then - ; 2 elements + - [[:bytes 4]] ; Type has payload of exactly 4 bytes + - [[:bytes 2] [:elements 2]] ; Type has payload of exactly 2 bytes, + ; followed by 2 elements - [[:bytes {:read 2}] [:elements {:read 4 :multiplier 2 :unsigned? true}]] - ; Type has payload of bytes, then + ; Type has payload of bytes, followed by ; *2 (multiplier) elements Note that `payload-spec` can be handy for skipping over items in @@ -1254,7 +1254,7 @@ - :compressor nil - :encryptor nil - :no-header? true" - [x] + ^bytes [x] (let [baos (ByteArrayOutputStream. 64) dos (DataOutputStream. baos)] (with-cache (-freeze-with-meta! x dos)) @@ -1263,11 +1263,13 @@ (defn freeze "Serializes arg (any Clojure data type) to a byte array. To freeze custom types, extend the Clojure reader or see `extend-freeze`." - ([x] (freeze x nil)) - ([x {:as opts - :keys [compressor encryptor password serializable-allowlist incl-metadata?] - :or {compressor :auto - encryptor aes128-gcm-encryptor}}] + (^bytes [x] (freeze x nil)) + (^bytes + [x + {:as opts + :keys [compressor encryptor password serializable-allowlist incl-metadata?] + :or {compressor :auto + encryptor aes128-gcm-encryptor}}] (call-with-bindings :freeze opts (fn [] diff --git a/src/taoensso/nippy/tools.clj b/src/taoensso/nippy/tools.clj index 63175d7..e36dd0f 100644 --- a/src/taoensso/nippy/tools.clj +++ b/src/taoensso/nippy/tools.clj @@ -11,10 +11,10 @@ (def ^:dynamic *thaw-opts* nil) (do - (defmacro with-freeze-opts [opts & body] `(binding [*freeze-opts* ~opts ] ~@body)) - (defmacro with-freeze-opts+ [opts & body] `(binding [*freeze-opts* (enc/fast-merge *freeze-opts* ~opts)] ~@body)) - (defmacro with-thaw-opts [opts & body] `(binding [*thaw-opts* ~opts ] ~@body)) - (defmacro with-thaw-opts+ [opts & body] `(binding [*thaw-opts* (enc/fast-merge *thaw-opts* ~opts)] ~@body))) + (defmacro with-freeze-opts [opts & body] `(binding [*freeze-opts* ~opts ] ~@body)) + (defmacro with-freeze-opts+ [opts & body] `(binding [*freeze-opts* (enc/merge *freeze-opts* ~opts)] ~@body)) + (defmacro with-thaw-opts [opts & body] `(binding [*thaw-opts* ~opts ] ~@body)) + (defmacro with-thaw-opts+ [opts & body] `(binding [*thaw-opts* (enc/merge *thaw-opts* ~opts)] ~@body))) (deftype WrappedForFreezing [val opts]) (defn wrapped-for-freezing? [x] (instance? WrappedForFreezing x)) @@ -27,7 +27,7 @@ See also `tools/freeze`." ([x ] (wrap-for-freezing x nil)) ([x wrap-opts] - (let [captured-opts (enc/fast-merge *freeze-opts* wrap-opts)] ; wrap > dynamic + (let [captured-opts (enc/merge *freeze-opts* wrap-opts)] ; wrap > dynamic (if (instance? WrappedForFreezing x) (let [^WrappedForFreezing x x] (if (= (.-opts x) captured-opts) @@ -46,13 +46,13 @@ See also `tools/wrap-for-freezing`." ([x ] (freeze x nil)) ([x default-opts] - (let [default-opts (get default-opts :default-opts default-opts) ; Back compatibility - active-opts (enc/fast-merge default-opts *freeze-opts*)] ; dynamic > default + (let [default-opts (get default-opts :default-opts default-opts) ; Back compatibility + active-opts (enc/merge default-opts *freeze-opts*)] ; dynamic > default (if (instance? WrappedForFreezing x) (let [^WrappedForFreezing x x] - (nippy/freeze (.-val x) (enc/fast-merge active-opts (.-opts x)))) ; captured > active! - (nippy/freeze x active-opts))))) + (nippy/freeze (.-val x) (enc/merge active-opts (.-opts x)))) ; captured > active! + (nippy/freeze x active-opts))))) (defn thaw "Like `nippy/thaw` but uses as options the following, merged in @@ -62,8 +62,8 @@ 2. `tools/*thaw-opts*` dynamic value (default nil)." ([ba ] (thaw ba nil)) ([ba default-opts] - (let [default-opts (get default-opts :default-opts default-opts) ; Back compatibility - active-opts (enc/fast-merge default-opts *thaw-opts*)] ; dynamic > default + (let [default-opts (get default-opts :default-opts default-opts) ; Back compatibility + active-opts (enc/merge default-opts *thaw-opts*)] ; dynamic > default (nippy/thaw ba active-opts))))