Add split sink routing helpers

This commit is contained in:
Nanaloveyuki
2026-05-09 22:00:02 +08:00
parent fa2a165942
commit 2e008b649c
7 changed files with 159 additions and 0 deletions
+28
View File
@@ -247,6 +247,34 @@ pub impl[A : Sink, B : Sink] Sink for FanoutSink[A, B] with write(self, rec) {
self.right.write({ ..rec })
}
pub struct SplitSink[A, B] {
left : A
right : B
predicate : (Record) -> Bool
}
pub fn[A, B] split_sink(left : A, right : B, predicate : (Record) -> Bool) -> SplitSink[A, B] {
{ left, right, predicate }
}
pub fn[A, B] split_by_level(
left : A,
right : B,
min_level~ : Level = Level::Warn,
) -> SplitSink[A, B] {
split_sink(left, right, fn(rec) {
rec.level.enabled(min_level)
})
}
pub impl[A : Sink, B : Sink] Sink for SplitSink[A, B] with write(self, rec) {
if (self.predicate)(rec) {
self.left.write(rec)
} else {
self.right.write(rec)
}
}
pub struct CallbackSink {
callback : (Record) -> Unit
}