Skip to content

Queued-sink-type

QueuedSink[S] is the public queue wrapper sink type used for explicit synchronous queueing over another sink. It is the concrete sink type returned by queued_sink(...) and preserves the wrapped sink type in its type parameter.

Interface

moonbit
pub struct QueuedSink[S] {
  sink : S
  queue : @queue.Queue[Record]
  max_pending : Int
  overflow : QueueOverflowPolicy
  dropped_count : Ref[Int]
}

output

  • QueuedSink[S] - Public synchronous sink type that queues records before they are drained 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, queue : @queue.Queue[Record], max_pending : Int, overflow : QueueOverflowPolicy, and dropped_count : Ref[Int].
  • queued_sink(...) constructs this type directly from a wrapped sink and queue policy.
  • The sink preserves the wrapped sink type S, which is useful when typed composition still matters after queueing is introduced.

How to Use

Here are some specific examples provided.

When Need A Typed Queued Sink Value

When code should keep the concrete queue wrapper sink type visible:

moonbit
let sink : QueuedSink[ConsoleSink] = queued_sink(console_sink(), max_pending=4)

In this example, the sink value stays explicit and preserves the wrapped console sink type.

When Need A Typed Logger With Explicit Queueing

When logging should preserve the queue wrapper sink type in the logger:

moonbit
let logger : Logger[QueuedSink[ConsoleSink]] = Logger::new(
  queued_sink(console_sink(), max_pending=2, overflow=QueueOverflowPolicy::DropOldest),
  target="queue",
)

In this example, the concrete queued sink remains part of the logger type.

Error Case

e.g.:

  • QueuedSink[S] itself does not have a runtime failure mode.

  • Runtime behavior still depends on the wrapped sink S, and records may be dropped when the queue reaches the configured bound.

Notes

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

  2. Use BufferedSink[S] when simple threshold buffering is enough and overflow policy is unnecessary.

Published from the repository docs folder with VitePress.