Skip to main content

agent_context/context/events/
subscribe.rs

1//! 订阅管理请求消息。
2//!
3//! 动态管理 [`AgentContext`](crate::AgentContext) 的订阅者,支持 spawn 后随时订阅/退订。
4
5use kameo::actor::{Recipient, ReplyRecipient};
6
7use super::outbound::{NotifyChange, NotifyCompressedForReply};
8
9/// 添加变更通知订阅者。Reply = `()`。
10///
11/// 订阅后,每次对 incremental 区的写操作都会通过 [`NotifyChange`] 通知该订阅者。
12/// 可重复调用注册多个订阅者。若该订阅者已存在则无操作。
13pub struct RequestSubscribeChange<M: Send + 'static> {
14    /// 要添加的订阅者引用
15    pub recipient: Recipient<NotifyChange<M>>,
16}
17
18/// 移除变更通知订阅者。Reply = `bool`。
19///
20/// 返回 `true` 表示该订阅者存在并被移除,`false` 表示未找到。
21pub struct RequestUnsubscribeChange<M: Send + 'static> {
22    /// 要移除的订阅者引用
23    pub recipient: Recipient<NotifyChange<M>>,
24}
25
26/// 设置压缩结果订阅者。Reply = `()`。
27///
28/// 在 [`RequestCompress`](super::inbound::RequestCompress) 生成摘要后、写入 compressed 区之前,
29/// 将 [`NotifyCompressedForReply`] 发送给订阅者,订阅者返回修改后的 `(摘要, 保留)` 对。
30/// 后设覆盖前设(单例语义)。
31pub struct RequestSubscribeCompressed<M: Send + 'static> {
32    /// 压缩结果订阅者引用
33    pub recipient: ReplyRecipient<NotifyCompressedForReply<M>, (Vec<M>, Vec<M>)>,
34}
35
36/// 清除压缩结果订阅者。Reply = `()`。
37///
38/// 清除后 [`RequestCompress`](super::inbound::RequestCompress) 将跳过订阅者处理,直接使用原始摘要。
39pub struct RequestUnsubscribeCompressed;