crates/bindings-cpp/include/spacetimedb/bsatn/README.md
This directory contains a self-contained C++ implementation of BSATN (Binary SpacetimeDB Algebraic Type Notation) serialization.
The BSATN library can be used independently for serialization/deserialization without any SpacetimeDB module dependencies.
ITypeRegistrar.h - This is only for modules, not clients#include "bsatn/bsatn.h"
// Define your struct
struct MyData {
uint32_t id;
std::string name;
};
// Define serialization traits
SPACETIMEDB_STRUCT(MyData, id, name)
// Serialize
MyData data{42, "example"};
std::vector<uint8_t> buffer;
SpacetimeDB::bsatn::Writer writer(buffer);
SpacetimeDB::bsatn::serialize(writer, data);
// Deserialize
SpacetimeDB::bsatn::Reader reader(buffer);
auto result = SpacetimeDB::bsatn::deserialize<MyData>(reader);
ITypeRegistrar.h: Interface for optional type registration. Clients can ignore this - it's only used by SpacetimeDB modules. The interface is kept here to avoid circular dependencies while maintaining clean architecture.
No external dependencies: All files only include other BSATN headers or standard C++ library headers.
Special types: The library includes SpacetimeDB special types (Identity, ConnectionId, Timestamp, TimeDuration) that serialize with specific tags for compatibility.
reader.h, writer.h, serialization.halgebraic_type.h, traits.h, primitive_traits.htypes.h, timestamp.h, time_duration.h, special_types.hsize_calculator.h, sum_type.hITypeRegistrar.h (can be ignored by clients)