Skip to main content

printwell_cli/cli/utils/
output.rs

1//! Output utilities for CLI status messages.
2//!
3//! This module provides a consistent interface for CLI output.
4//! Status messages go to stderr, while actual command output (like JSON)
5//! goes to stdout. This follows Unix conventions.
6
7use std::fmt::Display;
8use std::path::Path;
9
10/// Print a status message to stderr.
11///
12/// Use this for informational messages about command progress.
13#[macro_export]
14macro_rules! status {
15    ($($arg:tt)*) => {
16        eprintln!($($arg)*)
17    };
18}
19
20/// Print a success message about a file being written.
21#[allow(dead_code)]
22pub fn file_written(path: impl AsRef<Path>) {
23    eprintln!("Written to: {}", path.as_ref().display());
24}
25
26/// Print a success message with description about a file being written.
27#[allow(dead_code)]
28pub fn file_written_desc(desc: impl Display, path: impl AsRef<Path>) {
29    eprintln!("{desc} written to: {}", path.as_ref().display());
30}
31
32/// Print a note/info message.
33pub fn note(msg: impl Display) {
34    eprintln!("{msg}");
35}
36
37/// Print a blank line to stderr.
38#[allow(dead_code)]
39pub fn blank() {
40    eprintln!();
41}
42
43/// Print batch conversion success.
44pub fn batch_ok(input: &str, output: impl AsRef<Path>, pages: u32) {
45    eprintln!(
46        "  [OK] {} -> {} ({} pages)",
47        input,
48        output.as_ref().display(),
49        pages
50    );
51}
52
53/// Print batch conversion failure.
54pub fn batch_fail(input: &str, error: impl Display) {
55    eprintln!("  [FAIL] {input} - {error}");
56}
57
58/// Print batch conversion summary.
59pub fn batch_summary(success: usize, failed: usize, elapsed_secs: f64) {
60    eprintln!("\nBatch conversion complete:");
61    eprintln!("  Success: {success}");
62    eprintln!("  Failed: {failed}");
63    eprintln!("  Time: {elapsed_secs:.2}s");
64}
65
66/// Print validation issue counts.
67#[allow(dead_code)]
68pub fn validation_counts(errors: usize, warnings: usize, infos: usize) {
69    eprintln!("Found {errors} errors, {warnings} warnings, {infos} info messages");
70}
71
72/// Print a validation issue line.
73#[allow(dead_code)]
74pub fn validation_issue(prefix: &str, category: impl Display, description: impl Display) {
75    eprintln!("{prefix} [{category}] {description}");
76}
77
78/// Print validation clause detail.
79#[allow(dead_code)]
80pub fn validation_clause(clause: &str) {
81    eprintln!("         Clause: {clause}");
82}
83
84/// Print validation suggestion detail.
85#[allow(dead_code)]
86pub fn validation_suggestion(suggestion: &str) {
87    eprintln!("         Suggestion: {suggestion}");
88}
89
90/// Print validation page detail.
91#[allow(dead_code)]
92pub fn validation_page(page: u32) {
93    eprintln!("         Page: {page}");
94}
95
96/// Print validation result summary.
97#[allow(dead_code)]
98pub fn validation_result(is_compliant: bool, level: impl Display) {
99    if is_compliant {
100        eprintln!("Result: COMPLIANT with {level}");
101    } else {
102        eprintln!("Result: NOT COMPLIANT with {level}");
103    }
104}