distribute/codec/variant

Types

A builder for creating codecs for Gleam’s Custom Types (ADTs).

pub opaque type VariantBuilder(a)

Values

pub fn add(
  builder: VariantBuilder(a),
  id: Int,
  name: String,
  inner: codec.Codec(b),
  wrap: fn(b) -> a,
  unwrap: fn(a) -> Result(b, Nil),
) -> VariantBuilder(a)

Add a variant with a payload to the codec. id: unique identifier (0-255). name: for error messages. inner: codec for the payload. wrap: ADT constructor. unwrap: extract payload or return Error(Nil) if wrong variant.

pub fn build(builder: VariantBuilder(a)) -> codec.Codec(a)

Finalize the builder and return a Codec(a). Panics if duplicate IDs are found.

pub fn new() -> VariantBuilder(a)

Create a new builder for an ADT codec.

pub fn unit(
  builder: VariantBuilder(a),
  id: Int,
  name: String,
  value: a,
  match: fn(a) -> Bool,
) -> VariantBuilder(a)

Add a variant without a payload (unit/constant).

Search Document