nagisa-types 0.6.1

Nagisa unified chat-bot domain model (protocol-agnostic types)
Documentation

nagisa 的跨协议域模型:QQ 机器人框架各层共享的事件、消息段、实体、Id、错误、能力、 资源类型。本 crate 只放数据形态和纯函数式便捷方法,无业务逻辑、无 I/O、不依赖 anyhow。

在 workspace 里的位置:适配器(nagisa-onebot / nagisa-milky)把各自协议的 JSON 翻译 进出这些类型,nagisa-core 用它们驱动 Bot 句柄与事件分发,业务插件只接触本 crate 的 类型,永不接触协议结构。

模块地图:

  • [error]:统一 Error / Result 与 [bail!] 宏; 业务看不到 retcode / HTTP status / 协议结构。
  • [context]:Context 扩展 trait(.context() / .with_context()), 把任意 Display 错误或 Option 归一到统一 Result
  • [capability]:Protocol 与可探测的 Capability
  • [vendor]:OneBot 实现端厂商 [Vendor](按 app_name 判定,用于动作名 aliasing)。
  • [id]:Uin / Scene / Peer / MessageId
  • [resource]:媒体资源的发送来源与接收引用。
  • [segment]:统一消息段 Segment
  • [message]:消息体 Message(即 Vec<Segment>)、查询/变换扩展 MessageExt、流式构造器 Msg
  • [entity]:好友 / 群 / 成员 / 文件等实体(取各协议字段并集,缺的为 Option)。
  • [event]:统一事件 Event(消息 / 通知 / 请求 / 元 / 逃生口)。

关键设计:

  • 不绑协议:所有类型按语义建模,不带任何 wire 细节;各协议的私有/未知形态有逃生口 (Segment::Raw / Event::Raw / 实体的 raw 字段), 适配器解码时绝不丢弃未知数据,绝不 panic。
  • 基于 Display 的错误上下文Context 是扩展 trait 而非 From<E: Display>——后者与既有 #[from] 实现相干性冲突,方法式适配是唯一相干安全的形态。
  • 收发同一套 Segment / Message:业务用同一组消息段收发,wire 级的入/出差异由适配器 私有承担;Message 就是 Vec<Segment>,便捷方法挂在 MessageExt 扩展 trait 上。