Skip to content

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

moonbit
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]], and flush_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:

moonbit
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:

moonbit
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

  1. Use buffered_sink(...) when you need a value of this type.

  2. Use QueuedSink[S] when overflow-aware queueing behavior is needed instead of simple buffering.

Published from the repository docs folder with VitePress.