Skip to main content

Module sink

Module sink 

Source
Expand description

Ambient output sink for the report layer.

By default the outln! macro writes report CONTENT to stdout, so the CLI behaves exactly as it always has. When the user passes --output-file <PATH>, main opens the file and calls set_file_sink once before dispatch; from then on every outln! lands in the file instead of stdout. The sink is process-global and ambient, so no command Options struct needs to thread the path through, and the programmatic / NAPI consumers (which call the build_* helpers and never the print_* dispatch) are unaffected because they never set the sink.

Progress, errors, and the “Report written to <path>” confirmation stay on stderr (plain eprintln!); interactive terminal chrome (the --explain tip, the combined orientation header) is gated on is_redirected so it never pollutes the file.

Functions§

flush
Flush the file sink and surface the first write error, if any. No-op (Ok) when writing to stdout. Call after rendering, before the confirmation.
is_redirected
Whether report content is currently being redirected to a file. Used to gate interactive terminal chrome that must not land in the file.
set_file_sink
Redirect all subsequent report content to file (truncating it). Call once, before any rendering. Also resets any prior sticky write error.
write_fmt_line
Write a line of report content (a trailing newline is added). Routed to the file sink when redirected, else stdout. Backs the outln! macro.
wrote
Whether any report content was written to the file sink. False when stdout was the target, or when a command errored before rendering anything.