Buffered-sink-type
BufferedSink[S] is the public buffering sink type used for threshold-based synchronous batching over another sink. It is the concrete sink type returned by buffered_sink(...) and preserves the wrapped sink type in its type parameter.
Interface
pub struct BufferedSink[S] {
sink : S
buffer : Ref[Array[Record]]
flush_limit : Int
}output
BufferedSink[S]- Public synchronous sink type that buffers records before forwarding them to the wrapped sink.
Explanation
Detailed rules explaining key parameters and behaviors
- This is a public root struct, not a type alias.
- The current fields are
sink : S,buffer : Ref[Array[Record]], andflush_limit : Int. buffered_sink(...)constructs this type directly from a wrapped sink and flush threshold.- The sink preserves the wrapped sink type
S, which is useful when typed composition still matters after buffering is introduced.
How to Use
Here are some specific examples provided.
When Need A Typed Buffered Sink Value
When code should keep the concrete buffering sink type visible:
let sink : BufferedSink[ConsoleSink] = buffered_sink(console_sink(), flush_limit=2)In this example, the sink value stays explicit and preserves the wrapped console sink type.
When Need A Typed Logger With Synchronous Batching
When logging should preserve the buffering sink type in the logger:
let logger : Logger[BufferedSink[ConsoleSink]] = Logger::new(
buffered_sink(console_sink(), flush_limit=2),
target="buffered",
)In this example, the concrete buffered sink remains part of the logger type.
Error Case
e.g.:
BufferedSink[S]itself does not have a runtime failure mode.Runtime behavior still depends on the wrapped sink
S, and buffered records can remain pending if flushing never happens.
Notes
Use
buffered_sink(...)when you need a value of this type.Use
QueuedSink[S]when overflow-aware queueing behavior is needed instead of simple buffering.