You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Convert (nearly) any Zig runtime datatype to binary data and back.
Computes a stream signature that prevents deserialization of invalid data.
No support for graph like structures. Everything is considered to be tree data.
Unsupported types:
All comptime only types
Unbound pointers (c pointers, pointer to many)
volatile pointers
Untagged or external unions
Opaque types
Function pointers
Frames
API
The library itself provides only some APIs, as most of the serialization process is not configurable.
/// Serializes the given `value: T` into the `stream`./// - `stream` is a instance of `std.io.Writer`/// - `T` is the type to serialize/// - `value` is the instance to serialize.fnserialize(stream: anytype, comptimeT: type, value: T) StreamError!void;
/// Deserializes a value of type `T` from the `stream`./// - `stream` is a instance of `std.io.Reader`/// - `T` is the type to deserializefndeserialize(stream: anytype, comptimeT: type) (StreamError||error{UnexpectedData,EndOfStream})!T;
/// Deserializes a value of type `T` from the `stream`./// - `stream` is a instance of `std.io.Reader`/// - `T` is the type to deserialize/// - `allocator` is an allocator require to allocate slices and pointers./// Result must be freed by using `free()`.fndeserializeAlloc(stream: anytype, comptimeT: type, allocator: std.mem.Allocator) (StreamError||error{ UnexpectedData, OutOfMemory,EndOfStream })!T;
/// Releases all memory allocated by `deserializeAlloc`./// - `allocator` is the allocator passed to `deserializeAlloc`./// - `T` is the type that was passed to `deserializeAlloc`./// - `value` is the value that was returned by `deserializeAlloc`.fnfree(allocator: std.mem.Allocator, comptimeT: type, value: T) void;
Usage and Development
Adding the library
Just add the s2s.zig as a package to your Zig project. It has no external dependencies.
Running the test suite
[user@host s2s]$ zig test s2s.zigAll 3 tests passed.[user@host s2s]$
Project Status
Most of the serialization/deserialization is implemented for the trivial case.
Pointers/slices with non-standard alignment aren't properly supported yet.