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,没有解析。