spacetime-client 共享 package 占位说明
日期:2026-04-20
1. package 职责
spacetime-client 是 SpacetimeDB 客户端适配 package,后续负责:
- 生成 bindings 后的客户端访问封装
- Axum 与各模块对 reducer、view、订阅的调用适配
- 身份透传、连接配置与基础错误处理适配
2. 当前阶段说明
当前目录已不再只是占位,当前阶段已经落下:
- 通过
spacetime generate --lang rust --include-private生成的最小 Rust bindings DbConnection连接封装confirm_asset_object_and_returnprocedure 的最小调用适配bind_asset_object_to_entity_and_returnprocedure 的最小调用适配api-server所需的asset_object确认与asset_entity_binding绑定返回值转换
confirm_asset_object_and_return 与 bind_asset_object_to_entity_and_return 的调用必须等到 SDK on_connect 回调后再发起。DbConnection::build() 只代表 WebSocket 已经初始化,不代表 SpacetimeDB 身份握手完成;如果过早调用 procedure,本地联调会表现为连接建立但请求长期没有回调,最终等到 idle timeout。
后续与本 package 直接相关的任务包括:
- 固化 bindings 生成与更新脚本
- 设计 reducer、procedure、view、订阅的统一调用接口
- 设计身份透传与连接配置策略
- 设计 Axum / worker / 测试环境下的客户端复用方式
2.1 module_bindings 生成物约束
src/module_bindings 目录下的 Rust 文件统一视为 SpacetimeDB CLI 生成产物,后续维护必须遵守:
- 只允许通过
spacetime generate --lang rust刷新,不允许手工修改。 - 不允许对该目录执行
rustfmt,避免把 CLI 原始输出改写成额外格式化噪音。 src/lib.rs已通过#[rustfmt::skip] pub mod module_bindings;显式阻止 workspace 级cargo fmt继续递归格式化该目录。
3. 边界约束
spacetime-client只承接 SpacetimeDB 客户端访问适配,不承接具体业务模块的规则实现。- 业务状态真相仍由
apps/spacetime-module管理,业务编排由各模块 package 与apps/api-server承担。 - 不允许把 reducer、view、订阅调用细节重新散落到多个业务模块里各自实现。