Skip to content

Fanout-sink-type ​

FanoutSink[A, B] is the public routing sink type used for duplicating each record to two underlying sinks. It is the concrete sink type returned by fanout_sink(...) and preserves both wrapped sink types in its type parameters.

Interface ​

moonbit
pub struct FanoutSink[A, B] {
  left : A
  right : B
}

output ​

  • FanoutSink[A, B] - Public synchronous sink type that forwards each record to both wrapped sinks.

Explanation ​

Detailed rules explaining key parameters and behaviors

  • This is a public root struct, not a type alias.
  • The current fields are left : A and right : B.
  • fanout_sink(...) constructs this type directly from two sink values.
  • The sink preserves both wrapped sink types in the public type, which is useful when typed composition still matters after duplication is introduced.

How to Use ​

Here are some specific examples provided.

When Need A Typed Dual-output Sink Value ​

When code should keep the concrete duplication sink type visible:

moonbit
let sink : FanoutSink[ConsoleSink, JsonConsoleSink] = fanout_sink(console_sink(), json_console_sink())

In this example, the sink value stays explicit and preserves both destination sink types.

When Need A Typed Logger With Duplicated Delivery ​

When logging should preserve the fanout sink type in the logger:

moonbit
let logger : Logger[FanoutSink[ConsoleSink, JsonConsoleSink]] = Logger::new(
  fanout_sink(console_sink(), json_console_sink()),
  target="dual",
)

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

Error Case ​

e.g.:

  • FanoutSink[A, B] itself does not have a runtime failure mode.

  • Runtime behavior still depends on both wrapped sinks, so any sink-specific limitations remain unchanged behind the fanout wrapper.

Notes ​

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

  2. Use SplitSink[A, B] when records should go to one side conditionally instead of always going to both sides.

Published from the repository docs folder with VitePress.