serify — Elixir worker library

Elixir worker library for serify, a cross-language serialization conformance harness.

You define a schema and test cases once; each target language ships a small worker program that serializes and deserializes the data, and the serify CLI drives every worker through the same cases and compares their output byte-for-byte. This package is what an Elixir worker depends on.

Requires OTP 27 or newer.

Install

def deps do
[{:serify, "~> 0.1"}]
end

Usage

use WorkerLib.Serify.Model plus one serify_field per field is the binding. You supply the byte layout and register it per format:

defmodule UserRecord do
use WorkerLib.Serify.Model
defstruct [:user_id, :username, :score]
serify_field(:user_id, :u64)
serify_field(:username, :string)
serify_field(:score, :f32, key: "score_pct")
# marshal/1 and unmarshal/1 are your byte layout — Elixir's bitstring syntax
# makes one whole wire format read as a single <<...>> literal.
end
defmodule Worker do
def main(_args) do
WorkerLib.run_suite(%{
"user" => %WorkerLib.Type{
model: UserRecord,
formats: %{"binary" => {&UserRecord.marshal/1, &UserRecord.unmarshal/1}}
}
})
end
end

key: renames a field's schema key. The macro generates to_field_map/1 and from_field_map/1 at compile time.

run_suite takes over stdin/stdout to speak the NDJSON protocol the CLI drives, so a worker's own output must go to stderr.

Documentation

Full documentation, the protocol spec, and reference workers for all nine languages live in the main repository.

License

Apache-2.0