Skip to content

Queued-sink-drain ​

Drain queued records from a QueuedSink[S]. This is the direct sink-level queue delivery API when code owns a queued sink and wants controlled progress into the wrapped sink.

Interface ​

moonbit
pub fn[S : Sink] QueuedSink::drain(self : QueuedSink[S], max_items~ : Int = -1) -> Int {

input ​

  • self : QueuedSink[S] - Queued sink whose pending records should be drained to the wrapped sink.
  • max_items : Int - Optional upper bound on drained queued records. Negative values mean no explicit bound.

output ​

  • Int - Number of drained records.

Explanation ​

Detailed rules explaining key parameters and behaviors

  • max_items == 0 returns 0 immediately.
  • Negative max_items means drain up to the current pending_count().
  • The method repeatedly pops from the queue and writes each record to the wrapped sink in order until the limit is reached or the queue becomes empty.
  • The return value is the number of records actually drained.

How to Use ​

Here are some specific examples provided.

When Need Bounded Queue Progress ​

When queued work should be advanced in chunks:

moonbit
let drained = sink.drain(max_items=16)

In this example, callers cap how much queue backlog is forwarded in one step.

When Need Full Manual Drain ​

When a queued sink should be emptied explicitly:

moonbit
ignore(sink.drain())

In this example, the queue is drained without an explicit item cap.

Error Case ​

e.g.:

  • If the queue is already empty, the method returns 0.

  • If callers only need the shorthand that drains the whole queue, flush() is the simpler API.

Notes ​

  1. Prefer this helper when queue progress should be bounded or directly observed.

  2. Pair it with pending_count() to inspect remaining backlog after a drain step.

Published from the repository docs folder with VitePress.