printwell-cli 0.1.11

Command-line tool for HTML to PDF conversion
Documentation
//! Output utilities for CLI status messages.
//!
//! This module provides a consistent interface for CLI output.
//! Status messages go to stderr, while actual command output (like JSON)
//! goes to stdout. This follows Unix conventions.

use std::fmt::Display;
use std::path::Path;

/// Print a status message to stderr.
///
/// Use this for informational messages about command progress.
#[macro_export]
macro_rules! status {
    ($($arg:tt)*) => {
        eprintln!($($arg)*)
    };
}

/// Print a success message about a file being written.
#[allow(dead_code)]
pub fn file_written(path: impl AsRef<Path>) {
    eprintln!("Written to: {}", path.as_ref().display());
}

/// Print a success message with description about a file being written.
#[allow(dead_code)]
pub fn file_written_desc(desc: impl Display, path: impl AsRef<Path>) {
    eprintln!("{desc} written to: {}", path.as_ref().display());
}

/// Print a note/info message.
pub fn note(msg: impl Display) {
    eprintln!("{msg}");
}

/// Print a blank line to stderr.
#[allow(dead_code)]
pub fn blank() {
    eprintln!();
}

/// Print batch conversion success.
pub fn batch_ok(input: &str, output: impl AsRef<Path>, pages: u32) {
    eprintln!(
        "  [OK] {} -> {} ({} pages)",
        input,
        output.as_ref().display(),
        pages
    );
}

/// Print batch conversion failure.
pub fn batch_fail(input: &str, error: impl Display) {
    eprintln!("  [FAIL] {input} - {error}");
}

/// Print batch conversion summary.
pub fn batch_summary(success: usize, failed: usize, elapsed_secs: f64) {
    eprintln!("\nBatch conversion complete:");
    eprintln!("  Success: {success}");
    eprintln!("  Failed: {failed}");
    eprintln!("  Time: {elapsed_secs:.2}s");
}

/// Print validation issue counts.
#[allow(dead_code)]
pub fn validation_counts(errors: usize, warnings: usize, infos: usize) {
    eprintln!("Found {errors} errors, {warnings} warnings, {infos} info messages");
}

/// Print a validation issue line.
#[allow(dead_code)]
pub fn validation_issue(prefix: &str, category: impl Display, description: impl Display) {
    eprintln!("{prefix} [{category}] {description}");
}

/// Print validation clause detail.
#[allow(dead_code)]
pub fn validation_clause(clause: &str) {
    eprintln!("         Clause: {clause}");
}

/// Print validation suggestion detail.
#[allow(dead_code)]
pub fn validation_suggestion(suggestion: &str) {
    eprintln!("         Suggestion: {suggestion}");
}

/// Print validation page detail.
#[allow(dead_code)]
pub fn validation_page(page: u32) {
    eprintln!("         Page: {page}");
}

/// Print validation result summary.
#[allow(dead_code)]
pub fn validation_result(is_compliant: bool, level: impl Display) {
    if is_compliant {
        eprintln!("Result: COMPLIANT with {level}");
    } else {
        eprintln!("Result: NOT COMPLIANT with {level}");
    }
}