merman 0.7.0

Parity-focused, headless Rust implementation of Mermaid for parsing, layout, and rendering.
Documentation
use std::io::{self, IsTerminal, Read};

pub fn read_mermaid_or_default(example_name: &str, default_source: &str) -> io::Result<String> {
    let stdin = io::stdin();
    if stdin.is_terminal() {
        eprintln!(
            "{example_name}: no Mermaid source on stdin; using the built-in example. \
Pipe Mermaid source or redirect a .mmd file to render custom input."
        );
        return Ok(default_source.to_string());
    }

    let mut input = String::new();
    stdin.lock().read_to_string(&mut input)?;
    if input.trim().is_empty() {
        eprintln!("{example_name}: stdin was empty; using the built-in example.");
        Ok(default_source.to_string())
    } else {
        Ok(input)
    }
}