Skip to main content

Module codec

Module codec 

Source
Expand description

Serialization and deserialization traits and utilities.

This module provides two encoding strategies for contract data:

  • Codec32: Fixed 32-byte encoding for storage slots
  • BytesCodec: Variable-length encoding for complex types

Both traits support #[derive] macros for automatic implementation.

§Codec32 - Fixed-Size Storage

Used for values stored in 32-byte storage slots. All primitive integers, booleans, and 32-byte arrays implement this trait.

use truthlinked_sdk::codec::Codec32;

let value = 42u64;
let encoded = value.encode_32(); // [42, 0, 0, ..., 0] (32 bytes)
let decoded = u64::decode_32(&encoded)?; // 42

§BytesCodec - Variable-Length Encoding

Used for complex types, strings, and variable-length data. Supports automatic derivation for structs and enums.

#[derive(BytesCodec)]
struct Transfer {
    to: [u8; 32],
    amount: u64,
}

let transfer = Transfer { to: [0; 32], amount: 100 };
let bytes = transfer.encode_bytes();
let decoded = Transfer::decode_bytes(&bytes)?;

§Encoder/Decoder - Builder Pattern

For manual encoding of complex types:

use truthlinked_sdk::codec::{Encoder, Decoder};

// Encoding
let mut enc = Encoder::new();
enc.push_u64(42);
enc.push_string("hello");
enc.push_bool(true);
let bytes = enc.into_vec();

// Decoding
let mut dec = Decoder::new(&bytes);
let num = dec.read_u64()?;
let text = dec.read_string()?;
let flag = dec.read_bool()?;
dec.finish()?; // Ensure all bytes consumed

Structs§

Decoder
Parser for decoding values from a byte stream.
Encoder
Builder for encoding multiple values into a byte stream.

Constants§

ERR_CODEC
Error code for general codec failures.
ERR_CODEC_EOF
Error code for unexpected end of input during decoding.
ERR_CODEC_UTF8
Error code for invalid UTF-8 sequences in string decoding.

Traits§

BytesCodec
Trait for types that can be encoded/decoded to/from variable-length bytes.
Codec32
Trait for types that can be encoded/decoded to/from 32-byte slots.