Go Runtime

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

Installation

go get github.com/vexil-lang/vexil/packages/runtime-go

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.WriteVarint(12345)       // write LEB128-encoded integer
bytes := w.Finish()        // flush and return byte slice

BitReader

r := vexil.NewBitReader(bytes)
nibble := r.ReadBits(4)    // read 4 bits
b := r.ReadU8()            // read a full byte
value := r.ReadVarint()    // read LEB128-encoded integer

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/