Go Runtime

The Go runtime provides BitWriter and BitReader for Vexil-generated Go code.

Installation

The Go runtime is available as the versioned module github.com/vexil-lang/vexil/packages/runtime-go@v0.1.1. It requires Go 1.22 or later.

go get github.com/vexil-lang/vexil/packages/runtime-go@v0.1.1

Generated Go and its runtime are exercised together against a representative shared wire matrix. This is not exhaustive for every schema or environment.

Core types

BitWriter

import vexil "github.com/vexil-lang/vexil/packages/runtime-go"

w := vexil.NewBitWriter()
w.WriteBits(0b1010, 4)    // write 4 bits
w.WriteU8(255)             // write a full byte
w.WriteLeb128(12345)       // write an unsigned LEB128 integer
bytes := w.Finish()        // flush and return byte slice

BitReader

r := vexil.NewBitReader(bytes)
nibble, err := r.ReadBits(4)
if err != nil {
    return err
}
b, err := r.ReadU8()
if err != nil {
    return err
}
value, err := r.ReadLeb128(10)
if err != nil {
    return err
}

Generated code usage

Generated Go structs implement Pack and Unpack methods:

// Encode
w := vexil.NewBitWriter()
myMessage.Pack(w)
bytes := w.Finish()

// Decode
r := vexil.NewBitReader(bytes)
var decoded MyMessage
decoded.Unpack(r)

Source

packages/runtime-go/