runmat 0.4.4

High-performance MATLAB/Octave syntax mathematical runtime
Documentation
use runmat_core::{ExecutionStreamEntry, ExecutionStreamKind};
use std::io::{self, Write};

pub(crate) fn emit_execution_streams(streams: &[ExecutionStreamEntry]) {
    let mut stdout = io::stdout();
    let mut stderr = io::stderr();
    for entry in streams {
        match entry.stream {
            ExecutionStreamKind::Stdout | ExecutionStreamKind::Stderr => {
                let bytes = entry.text.as_bytes();
                let write_result = match entry.stream {
                    ExecutionStreamKind::Stdout => stdout.write_all(bytes),
                    ExecutionStreamKind::Stderr => stderr.write_all(bytes),
                    ExecutionStreamKind::ClearScreen => unreachable!(),
                };
                if let Err(err) = write_result {
                    eprintln!("Failed to write execution stream: {err}");
                    break;
                }
            }
            ExecutionStreamKind::ClearScreen => {
                if atty::is(atty::Stream::Stdout) {
                    print!("\x1B[2J\x1B[H");
                    let _ = io::stdout().flush();
                }
            }
        }
    }
    let _ = stdout.flush();
    let _ = stderr.flush();
}