ir_sink の設計

設計目標

レポートのパイプラインに供給するシンクを、2 つ目の実装を作らずに、アプリケーションが 1 つの短いインポートで使えるようにします。

数学的背景

ir_sink の各関数は event の関数と等しく、in_memory = InMemorySink::new、jsonl = JsonlSink::new、jsonl_stream = streaming_jsonl、tee = tee です。このパッケージは振る舞いについては恒等で、名前を変えるだけです。

設計上の決定

2 つ目のシンク層ではなくファサード

問題。 「レポート用にイベントを JSONL へ」だけを望む例やアプリケーションが、event の全体を学ぶ必要があるべきではありません。選択。 委譲する 4 つの関数。理由。 すべての振る舞いは event で一度だけ定義されるため、ファサードがずれることはありません。返す型は event の型なので、両方のパッケージの値を自由に混在させられます。

正しさと不変条件

  • 各関数は、対応する event の関数が返すものとまったく同じものを返します。
  • ir_sink は event だけに依存します。

採用しなかった代替案

  • pub using による再エクスポート。 それでも機能しますが、名前付きの関数にすることで、短い名前(jsonl_stream)を event の名前から独立させられます。

境界

  • 独自のシンク型、ファイル IO、解析は持ちません。