Spacetimedbex.BSATN.Encoder (spacetimedbex v0.1.2)

Copy Markdown View Source

Encodes Elixir values into BSATN (Binary SpacetimeDB Algebraic Type Notation).

All integers are little-endian. Strings and arrays have u32 length prefixes. Structs (products) are unframed concatenated fields. Enums (sums) use a u8 tag.

Summary

Functions

Encode an array of elements using the given element encoder function. u32 count prefix + concatenated encoded elements.

Encode a boolean as 1 byte.

Encode raw bytes: u32 length prefix + data.

Encode a 32-bit float (IEEE 754), stored as u32 bits, little-endian.

Encode a 64-bit float (IEEE 754), stored as u64 bits, little-endian.

Encode a signed 8-bit integer.

Encode a signed 16-bit integer, little-endian.

Encode a signed 32-bit integer, little-endian.

Encode a signed 64-bit integer, little-endian.

Encode a signed 128-bit integer, little-endian.

Encode a signed 256-bit integer, little-endian.

Encode an Option: tag 0 = Some(value), tag 1 = None. Note: SpacetimeDB uses 0=Some, 1=None (opposite of Rust's convention).

Encode a product (struct): just concatenate all field binaries in order.

Encode a UTF-8 string: u32 length prefix + raw bytes.

Encode a sum type (enum variant): u8 tag + encoded payload.

Encode an unsigned 8-bit integer.

Encode an unsigned 16-bit integer, little-endian.

Encode an unsigned 32-bit integer, little-endian.

Encode an unsigned 64-bit integer, little-endian.

Encode an unsigned 128-bit integer, little-endian.

Encode an unsigned 256-bit integer, little-endian.

Functions

encode_array(elements, encode_fn)

Encode an array of elements using the given element encoder function. u32 count prefix + concatenated encoded elements.

encode_bool(bool)

Encode a boolean as 1 byte.

encode_bytes(data)

Encode raw bytes: u32 length prefix + data.

encode_f32(val)

Encode a 32-bit float (IEEE 754), stored as u32 bits, little-endian.

encode_f64(val)

Encode a 64-bit float (IEEE 754), stored as u64 bits, little-endian.

encode_i8(val)

Encode a signed 8-bit integer.

encode_i16(val)

Encode a signed 16-bit integer, little-endian.

encode_i32(val)

Encode a signed 32-bit integer, little-endian.

encode_i64(val)

Encode a signed 64-bit integer, little-endian.

encode_i128(val)

Encode a signed 128-bit integer, little-endian.

encode_i256(val)

Encode a signed 256-bit integer, little-endian.

encode_option(arg1)

Encode an Option: tag 0 = Some(value), tag 1 = None. Note: SpacetimeDB uses 0=Some, 1=None (opposite of Rust's convention).

encode_product(field_binaries)

Encode a product (struct): just concatenate all field binaries in order.

encode_string(str)

Encode a UTF-8 string: u32 length prefix + raw bytes.

encode_sum(tag, payload_binary)

Encode a sum type (enum variant): u8 tag + encoded payload.

encode_u8(val)

Encode an unsigned 8-bit integer.

encode_u16(val)

Encode an unsigned 16-bit integer, little-endian.

encode_u32(val)

Encode an unsigned 32-bit integer, little-endian.

encode_u64(val)

Encode an unsigned 64-bit integer, little-endian.

encode_u128(val)

Encode an unsigned 128-bit integer, little-endian.

encode_u256(val)

Encode an unsigned 256-bit integer, little-endian.