frosty
Serialize native Nim types to strings, streams, or sockets.
Usage
There are two operations: freeze
and thaw
.
freeze[T](input: T; output: Socket or Stream or var string)
import frosty
var
data = someArbitraryDataFactory()
handle = openFileStream("somefile", fmWrite)
# write serialized data into the file handle
freeze(data, handle)
close handle
thaw[T](input: Socket or Stream or string; output: var T)
import frosty
var
data: SomeArbitraryType
handle = openFileStream("somefile", fmRead)
# read deserialized data from the file handle
thaw(handle, data)
close handle
freeze[T](input: T): string
thaw[T](input: Socket or Stream or string): T
import frosty
# adhoc serialization and deserialization
var brrr = freeze("my data")
assert thaw[string](brrr) == "my data"
Performance
Frosty can handle cyclic data structures, but not memory graphs of extreme size -- you can exhaust the stack because our traversal is implemented via recursion. This will be solved soon.
Benchmark vs. Flatty
The source to the following benchmark is found in the tests directory.
The benchmark compares frosty to https://github.com/treeform/flatty for a few static datatypes -- flatty does not work with cast objects yet.
Installation
$ nimph clone disruptek/frosty
or if you're still using Nimble like it's 2012,
$ nimble install https://github.com/disruptek/frosty
Options
--define:frostySorted=on
to use Miran'ssorta
B-Trees.--define:frostyNet=off
to omitSocket
support for platform reasons.--define:frostyDebug=on
to emit some debugging output.
Documentation
License
MIT