Skip to content

Rust — 核心类型

nnrp-core 是 NNRP/1 Preview4 协议语义的 canonical Rust 来源。它拥有 wire 常量、固定布局 metadata、profile registry、runtime-control frame、object/cache metadata、校验逻辑和可复用生命周期状态机。

Dependency

toml
[dependencies]
nnrp-core = "1.0.0-preview.4.17"

边界

nnrp-core 不打开 socket,也不启动 async task。它定义并校验协议模型,供 nnrp-runtime、transport provider、FFI binding、WASM helper 和 conformance suite 复用。

基线 Metadata Codec

Preview 4 角色 API 和公开一致性测试使用的已冻结基线 metadata 类型具有统一 Rust codec 形态:Type::to_bytes() 编码精确宽度值,Type::parse() 解码并校验。该集合包括 ClientHelloMetadataSessionPatchAckMetadataFlowUpdateMetadataResultHintMetadataFrameSubmitMetadataResultPushMetadataCachePutMetadataCacheAckMetadataCacheInvalidateMetadataTransportProbeMetadataTransportProbeAckMetadataObjectReferenceBlock

解析会拒绝错误长度、非零保留字段、非法枚举值和非法 flag 组合。一致性测试与下游 binding 复用这些 codec,不维护第二套线路实现。

主要类型族

类型族示例使用方
Protocol header 与 message idcommon header、message type、header flags、protocol version所有 wire codec
Session lifecycleSessionOpenMetadataSessionCloseMetadata、patch/migrate metadataclient/server runtime
Submit/resultFrameSubmitMetadataResultPushMetadata、result-drop metadatarequest/result flow
Flow 与 schedulingcredit、backpressure、priority、deadline、expire-at metadataruntime control
Runtime controlcancel/abort、progress、partial result、capability、route hint、trace contextPreview4 control profiles
Runtime objectobject declare/ref/release/delta metadataheavy transport 与 orchestration 路径
Cache referencecache reference/miss/invalidate metadatacache-aware profile 与 runtime
Registryprofile id、schema id、payload family、object kindconformance 与 SDK 校验

FrameSubmitMetadata

字段组说明
Profile 与 schema选择解释 body 的标准或应用 profile。
Operation identityoperation_id: u64 非零,并与公共头的 frame_id: u32 独立。
Priority 与 deadline提供调度 hint,不要求额外 JSON/protobuf control envelope。
Object/cache hints允许 transport 和 runtime 协调大 payload reference。

Canonical 72 字节 offset 见数据面与 Operation 标识。Rust 必须在 offset 32 编码 tile_index_bytes,在 offset 40 编码 operation_id

ResultPushMetadata

字段组说明
Correlation将 result bytes 关联回已提交 frame。
Status 与 timing携带完成状态和 timing hint。
Payload interpretation指向 result body 使用的 profile/schema。

Runtime-Control Metadata

Rust metadata 名称与 运行时控制 Profiles 中冻结的 wire profiles 对齐。

Control family目的
Cancel / abort停止过期或不再需要的工作。
Priority / deadline / expire-atSubmit 后更新调度决策。
Progress / partial result流式返回有意义的中间结果。
Backpressure / credit协调生产者和消费者压力。
Capability / route hint交换成本、偏好、限制和执行 hint。
Trace context / result-drop reason让端到端计时和丢弃原因可解释。

Object And Cache Metadata

Family目的
Object declare用 kind、size、version 和 lifetime hint 声明 runtime object。
Object ref引用已有 object,而不是重新发送 bytes。
Object release释放 ownership 或 lease state。
Object delta对已有 object 发送紧凑更新。
Cache reference报告可复用的 cached object。
Cache miss报告请求的 cache key 不可用。
Cache invalidate失效过期 object/cache state。

所有 Rust cache 类型统一使用同一个 CacheObjectId 身份:

rust
pub struct CacheObjectId {
    pub cache_namespace: u32,
    pub cache_key_hi: u64,
    pub cache_key_lo: u64,
    pub object_kind: CacheObjectKind,
}

CachePutMetadataCacheAckMetadataCacheInvalidateMetadataCacheReferenceMetadataCacheMissMetadataObjectReferenceBlock 均暴露相同的 cache_namespace: u32cache_key_hi: u64cache_key_lo: u64 字段。固定布局冻结在 缓存能力与租约运行时对象与缓存 Metadata

CacheLease

CacheLease 是经过校验的本地租约值,不是 wire payload,也不是 FFI handle。

Rust 字段类型协议字段
object_idCacheObjectIdobject_id
object_versionu64object_version
lease_idu64lease_id
owner_scopeCacheLeaseOwnerScopeowner_scope
owner_idu64owner_id
granted_at_msu64granted_at_ms
ttl_msu32ttl_ms

CacheLeaseOwnerScope 的取值为 Connection = 0Session = 1Operation = 2。 应用应使用 expires_at_msvalidate_live_atvalidate_version,不要重复实现租约时间运算。

常见问题

WARNING

  1. 不要在 SDK 本地代码重新分配 numeric message、profile、schema、object-kind 或 error value。
  2. 不要把 transport 行为塞进 nnrp-core;使用 nnrp-runtime 和 provider crates。
  3. 如果已经有紧凑控制帧,不要再把 Preview4 控制语义塞进临时 JSON。

NNRP Documentation