ir_sink 设计
设计目标
为应用提供一个简短的导入,用于获取向报告管线供数的接收器,而无需对它们进行第二次实现。
数学背景
ir_sink 的每个函数都等于一个 event 函数:in_memory = InMemorySink::new、jsonl = JsonlSink::new、jsonl_stream = streaming_jsonl、tee = tee。该包在行为上是恒等的;它只是重新命名。
设计决策
外观,而非第二层接收器
问题。 只想要“把事件写成 JSONL 供报告使用”的示例和应用,不应该需要学习 event 的全部接口。选择。 四个委托函数。理由。 每种行为只在 event 中定义一次,因此外观不会产生偏离;它返回的类型就是 event 的类型,因此两个包中的值可以自由混用。
正确性与不变量
- 每个函数返回的都恰好是相应
event函数返回的内容。 ir_sink只依赖event。
被否决的方案
- 用
pub using重新导出。 也可行;具名函数使短名称(jsonl_stream)独立于event中的名称。
边界
- 没有自己的接收器类型,没有文件 IO,没有解析。