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、解析は持ちません。