nippy/taoensso.nippy.html

102 lines
31 KiB
HTML
Raw Normal View History

2013-06-01 12:16:45 +00:00
<!DOCTYPE html>
2014-07-06 06:37:03 +00:00
<html><head><meta charset="UTF-8"><link href="css/default.css" rel="stylesheet" type="text/css"><script src="js/jquery.min.js" type="text/javascript"></script><script src="js/page_effects.js" type="text/javascript"></script><title>taoensso.nippy documentation</title></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html">Nippy 2.7.0-alpha1 API documentation</a></h1></div><div class="sidebar" id="namespaces"><h3><a href="index.html"><span class="inner">Namespaces</span></a></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>taoensso</span></div></div></li><li class="depth-2 current"><a href="taoensso.nippy.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>nippy</span></div></a></li><li class="depth-3 branch"><a href="taoensso.nippy.benchmarks.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>benchmarks</span></div></a></li><li class="depth-3 branch"><a href="taoensso.nippy.compression.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>compression</span></div></a></li><li class="depth-3 branch"><a href="taoensso.nippy.encryption.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>encryption</span></div></a></li><li class="depth-3 branch"><a href="taoensso.nippy.tools.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>tools</span></div></a></li><li class="depth-3"><a href="taoensso.nippy.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li></ul></div><div class="sidebar" id="vars"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="taoensso.nippy.html#var-*final-freeze-fallback*"><div class="inner"><span>*final-freeze-fallback*</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var--.3ECompressable-LZMA2"><div class="inner"><span>-&gt;Compressable-LZMA2</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var--.3EStressRecord"><div class="inner"><span>-&gt;StressRecord</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-aes128-encryptor"><div class="inner"><span>aes128-encryptor</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-coerce-custom-type-id"><div class="inner"><span>coerce-custom-type-id</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-custom-readers"><div class="inner"><span>custom-readers</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-extend-freeze"><div class="inner"><span>extend-freeze</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-extend-thaw"><div class="inner"><span>extend-thaw</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-Freezable"><div class="inner"><span>Freezable</span></div></a></li><li class="depth-2"><a href="taoensso.nippy.html#var-freeze-to-out*"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>freeze-to-out*</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-freezable.3F"><div class="inner"><span>freezable?</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-freeze"><div class="inner"><span>freeze</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-freeze-fallback-as-str"><div class="inner"><span>freeze-fallback-as-str</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-freeze-to-out.21"><div class="inner"><span>freeze-to-out!</span></div></a></li><li class="depth-1"><a href="taoensso.nippy.html#var-freeze-to-stream.21"><div class="inner"><span>freeze-to-stream!</span><
from Deep-Freeze.</pre></div><div class="public anchor" id="var-*final-freeze-fallback*"><h3>*final-freeze-fallback*</h3><h4 class="dynamic">dynamic</h4><div class="usage"></div><div class="doc"><pre class="plaintext">Alpha - subject to change.
</pre></div></div><div class="public anchor" id="var--.3ECompressable-LZMA2"><h3>-&gt;Compressable-LZMA2</h3><div class="usage"><code>(-&gt;Compressable-LZMA2 value)</code></div><div class="doc"><pre class="plaintext">Positional factory function for class taoensso.nippy.Compressable-LZMA2.
</pre></div></div><div class="public anchor" id="var--.3EStressRecord"><h3>-&gt;StressRecord</h3><div class="usage"><code>(-&gt;StressRecord data)</code></div><div class="doc"><pre class="plaintext">Positional factory function for class taoensso.nippy.StressRecord.
</pre></div></div><div class="public anchor" id="var-aes128-encryptor"><h3>aes128-encryptor</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Default 128bit AES encryptor with multi-round SHA-512 key-gen.
Password form [:salted &quot;my-password&quot;]
---------------------------------------
USE CASE: You want more than a small, finite number of passwords (e.g. each
item encrypted will use a unique user-provided password).
IMPLEMENTATION: Uses a relatively cheap key hash, but automatically salts
every key.
PROS: Each key is independent so would need to be attacked independently.
CONS: Key caching impossible, so there&apos;s an inherent trade-off between
encryption/decryption speed and the difficulty of attacking any
particular key.
Slower than `aes128-cached`, and easier to attack any particular key - but
keys are independent.
Password form [:cached &quot;my-password&quot;]
---------------------------------------
USE CASE: You want only a small, finite number of passwords (e.g. a limited
number of staff/admins, or you&apos;ll be using a single password to
encrypt many items).
IMPLEMENTATION: Uses a _very_ expensive (but cached) key hash, and no salt.
PROS: Great amortized encryption/decryption speed. Expensive key hash makes
attacking any particular key very difficult.
CONS: Using a small number of keys for many encrypted items means that if any
key _is_ somehow compromised, _all_ items encrypted with that key are
compromised.
Faster than `aes128-salted`, and harder to attack any particular key - but
increased danger if a key is somehow compromised.</pre></div></div><div class="public anchor" id="var-coerce-custom-type-id"><h3>coerce-custom-type-id</h3><div class="usage"><code>(coerce-custom-type-id custom-type-id)</code></div><div class="doc"><pre class="plaintext">* +ive byte id -&gt; -ive byte id (for unprefixed custom types).
* Keyword id -&gt; Short hash id (for prefixed custom types).</pre></div></div><div class="public anchor" id="var-custom-readers"><h3>custom-readers</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-extend-freeze"><h3>extend-freeze</h3><h4 class="type">macro</h4><div class="usage"><code>(extend-freeze type custom-type-id [x out] &amp; body)</code></div><div class="doc"><pre class="plaintext">Extends Nippy to support freezing of a custom type (ideally concrete) with
given id of form:
* Keyword - 2 byte overhead, resistent to id collisions.
* Byte ∈[1, 128] - no overhead, subject to id collisions.
2013-08-05 06:38:10 +00:00
(defrecord MyType [data])
2014-07-06 06:37:03 +00:00
(extend-freeze MyType :foo/my-type [x data-output] ; Keyword id
(.writeUTF [data-output] (:data x)))
;; or
(extend-freeze MyType 1 [x data-output] ; Byte id
(.writeUTF [data-output] (:data x)))</pre></div></div><div class="public anchor" id="var-extend-thaw"><h3>extend-thaw</h3><h4 class="type">macro</h4><div class="usage"><code>(extend-thaw custom-type-id [in] &amp; body)</code></div><div class="doc"><pre class="plaintext">Extends Nippy to support thawing of a custom type with given id:
(extend-thaw :foo/my-type [data-input] ; Keyword id
(-&gt;MyType (.readUTF data-input)))
;; or
(extend-thaw 1 [data-input] ; Byte id
(-&gt;MyType (.readUTF data-input)))</pre></div></div><div class="public anchor" id="var-Freezable"><h3>Freezable</h3><h4 class="type">protocol</h4><div class="usage"></div><div class="doc"><pre class="plaintext">Be careful about extending to interfaces, Ref. <a href="http://goo.gl/6gGRlU">http://goo.gl/6gGRlU</a>.
</pre></div><div class="members"><h4>members</h4><div class="inner"><div class="public anchor" id="var-freeze-to-out*"><h3>freeze-to-out*</h3><div class="usage"><code>(freeze-to-out* this out)</code></div><div class="doc"><pre class="plaintext"></pre></div></div></div></div></div><div class="public anchor" id="var-freezable.3F"><h3>freezable?</h3><div class="usage"><code>(freezable? x &amp; [{:keys [allow-clojure-reader? allow-java-serializable?]}])</code></div><div class="doc"><pre class="plaintext">Alpha - subject to change, may be buggy!
2014-03-12 05:15:19 +00:00
Returns truthy value iff Nippy supports de/serialization of given argument.
Conservative with default options.
`:allow-clojure-reader?` and `:allow-java-serializable?` options may be used
to also enable the relevant roundtrip fallback test(s). These tests are only
2014-07-06 06:37:03 +00:00
**moderately reliable** since they&apos;re cached by arg type and don&apos;t test for
pre/post serialization equality (there&apos;s no good general way of doing so).</pre></div></div><div class="public anchor" id="var-freeze"><h3>freeze</h3><div class="usage"><code>(freeze x &amp; [{:keys [compressor encryptor password skip-header?], :or {compressor lz4-compressor, encryptor aes128-encryptor}, :as opts}])</code></div><div class="doc"><pre class="plaintext">Serializes arg (any Clojure data type) to a byte array. To freeze custom
types, extend the Clojure reader or see `extend-freeze`.</pre></div></div><div class="public anchor" id="var-freeze-fallback-as-str"><h3>freeze-fallback-as-str</h3><div class="usage"><code>(freeze-fallback-as-str x out)</code></div><div class="doc"><pre class="plaintext">Alpha-subject to change.
</pre></div></div><div class="public anchor" id="var-freeze-to-out.21"><h3>freeze-to-out!</h3><div class="usage"><code>(freeze-to-out! data-output x &amp; _)</code></div><div class="doc"><pre class="plaintext">Low-level API. Serializes arg (any Clojure data type) to a DataOutput.
</pre></div></div><div class="public anchor" id="var-freeze-to-stream.21"><h3>freeze-to-stream!</h3><div class="usage"></div><div class="doc"><pre class="plaintext">DEPRECATED: Use `freeze-to-out!` instead.
</pre></div></div><div class="public anchor" id="var-id-bigdec"><h3>id-bigdec</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-bigint"><h3>id-bigint</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-biginteger"><h3>id-biginteger</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-boolean"><h3>id-boolean</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-byte"><h3>id-byte</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-byte-as-long"><h3>id-byte-as-long</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-bytes"><h3>id-bytes</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-char"><h3>id-char</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-date"><h3>id-date</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-double"><h3>id-double</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-float"><h3>id-float</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-int-as-long"><h3>id-int-as-long</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-integer"><h3>id-integer</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-keyword"><h3>id-keyword</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-keyword-small"><h3>id-keyword-small</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-list"><h3>id-list</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-long"><h3>id-long</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-map"><h3>id-map</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-meta"><h3>id-meta</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-nil"><h3>id-nil</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-old-keyword"><h3>id-old-keyword</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-old-map"><h3>id-old-map</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-old-reader"><h3>id-old-reader</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-old-string"><h3>id-old-string</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-prefixed-custom"><h3>id-prefixed-custom</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-queue"><h3>id-queue</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-ratio"><h3>id-ratio</h3><div class="usage"></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-id-reader"><h3>id-rea
</pre></div></div><div class="public anchor" id="var-lz4-compressor"><h3>lz4-compressor</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Default net.jpountz.lz4 compressor:
Ratio: low.
Write speed: very high.
Read speed: very high.
A good general-purpose compressor, competitive with Snappy.
Thanks to Max Penet (@mpenet) for our first implementation,
Ref. <a href="https://github.com/mpenet/nippy-lz4">https://github.com/mpenet/nippy-lz4</a></pre></div></div><div class="public anchor" id="var-lz4hc-compressor"><h3>lz4hc-compressor</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Like `lz4-compressor` but trades some write speed for ratio.
</pre></div></div><div class="public anchor" id="var-lzma2-compressor"><h3>lzma2-compressor</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Default org.tukaani.xz.LZMA2 compressor:
Ratio: high.
Write speed: _very_ slow (also currently single-threaded).
Read speed: slow.
A specialized compressor for large, low-write data in space-sensitive
environments.</pre></div></div><div class="public anchor" id="var-map-.3ECompressable-LZMA2"><h3>map-&gt;Compressable-LZMA2</h3><div class="usage"><code>(map-&gt;Compressable-LZMA2 m__5869__auto__)</code></div><div class="doc"><pre class="plaintext">Factory function for class taoensso.nippy.Compressable-LZMA2, taking a map of keywords to field values.
</pre></div></div><div class="public anchor" id="var-map-.3EStressRecord"><h3>map-&gt;StressRecord</h3><div class="usage"><code>(map-&gt;StressRecord m__5869__auto__)</code></div><div class="doc"><pre class="plaintext">Factory function for class taoensso.nippy.StressRecord, taking a map of keywords to field values.
</pre></div></div><div class="public anchor" id="var-read-biginteger"><h3>read-biginteger</h3><h4 class="type">macro</h4><div class="usage"><code>(read-biginteger in)</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-read-bytes"><h3>read-bytes</h3><h4 class="type">macro</h4><div class="usage"><code>(read-bytes in &amp; [small?])</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-read-compact-long"><h3>read-compact-long</h3><h4 class="type">macro</h4><div class="usage"><code>(read-compact-long in)</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-read-utf8"><h3>read-utf8</h3><h4 class="type">macro</h4><div class="usage"><code>(read-utf8 in &amp; [small?])</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-snappy-compressor"><h3>snappy-compressor</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Default org.iq80.snappy.Snappy compressor:
Ratio: low.
Write speed: very high.
Read speed: very high.
A good general-purpose compressor.</pre></div></div><div class="public anchor" id="var-stress-data"><h3>stress-data</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Reference data used for tests &amp; benchmarks.
</pre></div></div><div class="public anchor" id="var-stress-data-benchable"><h3>stress-data-benchable</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Reference data with stuff removed that breaks reader or other utils we&apos;ll
be benching against.</pre></div></div><div class="public anchor" id="var-stress-data-comparable"><h3>stress-data-comparable</h3><div class="usage"></div><div class="doc"><pre class="plaintext">Reference data with stuff removed that breaks roundtrip equality.
</pre></div></div><div class="public anchor" id="var-thaw"><h3>thaw</h3><div class="usage"><code>(thaw ba &amp; [{:keys [compressor encryptor password], :or {compressor :auto, encryptor :auto}, :as opts}])</code></div><div class="doc"><pre class="plaintext">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. To thaw custom types, extend the Clojure reader or see `extend-thaw`.
Options include:
:compressor - An ICompressor, :auto (requires Nippy header), or nil.
:encryptor - An IEncryptor, :auto (requires Nippy header), or nil.</pre></div></div><div class="public anchor" id="var-thaw-from-in.21"><h3>thaw-from-in!</h3><div class="usage"><code>(thaw-from-in! data-input &amp; _)</code></div><div class="doc"><pre class="plaintext">Low-level API. Deserializes a frozen object from given DataInput to its
original Clojure data type.</pre></div></div><div class="public anchor" id="var-thaw-from-stream.21"><h3>thaw-from-stream!</h3><div class="usage"></div><div class="doc"><pre class="plaintext">DEPRECATED: Use `thaw-from-in!` instead.
</pre></div></div><div class="public anchor" id="var-when-debug-mode"><h3>when-debug-mode</h3><h4 class="type">macro</h4><div class="usage"><code>(when-debug-mode &amp; body)</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-write-biginteger"><h3>write-biginteger</h3><h4 class="type">macro</h4><div class="usage"><code>(write-biginteger out x)</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-write-bytes"><h3>write-bytes</h3><h4 class="type">macro</h4><div class="usage"><code>(write-bytes out ba &amp; [small?])</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-write-compact-long"><h3>write-compact-long</h3><h4 class="type">macro</h4><div class="usage"><code>(write-compact-long out x)</code></div><div class="doc"><pre class="plaintext">Uses 2-&gt;9 bytes.
</pre></div></div><div class="public anchor" id="var-write-id"><h3>write-id</h3><h4 class="type">macro</h4><div class="usage"><code>(write-id out id)</code></div><div class="doc"><pre class="plaintext"></pre></div></div><div class="public anchor" id="var-write-utf8"><h3>write-utf8</h3><h4 class="type">macro</h4><div class="usage"><code>(write-utf8 out x &amp; [small?])</code></div><div class="doc"><pre class="plaintext"></pre></div></div></div></body></html>