supercli/output/
macros.rs

1//! Semantic output macros that respect output styling modes
2//!
3//! These macros provide the core SuperCLI functionality - semantic output
4//! that automatically adapts to different output styles (color, monochrome, none).
5
6#[cfg(feature = "clap")]
7use starbase_styles::color::owo::OwoColorize;
8use starbase_styles::color::{caution, failure, label, success, symbol as style_symbol};
9
10/// Internal implementation for success messages
11pub fn success_impl(message: &str, symbol: &str) {
12    #[cfg(feature = "clap")]
13    {
14        match crate::clap::get_output_style() {
15            "none" => println!("{symbol} {message}"),
16            "monochrome" => println!("{} {}", symbol.bold(), message.bold()),
17            _ => println!("{} {}", style_symbol(symbol), success(message)), // Color
18        }
19    }
20    #[cfg(not(feature = "clap"))]
21    {
22        println!("{} {}", style_symbol(symbol), success(message));
23    }
24}
25
26/// Print a success message with optional custom symbol
27///
28/// # Examples
29/// ```rust
30/// use supercli::success;
31///
32/// success!("Operation completed successfully!"); // Uses default ✔
33/// success!("Custom success message!", "✨"); // Uses custom symbol
34/// ```
35#[macro_export]
36macro_rules! success {
37    ($msg:expr) => {
38        $crate::output::macros::success_impl($msg, $crate::output::symbols::CHECK_MARK)
39    };
40    ($msg:expr, $symbol:expr) => {
41        $crate::output::macros::success_impl($msg, $symbol)
42    };
43}
44
45/// Internal implementation for warning messages
46pub fn warning_impl(message: &str, symbol: &str) {
47    #[cfg(feature = "clap")]
48    {
49        match crate::clap::get_output_style() {
50            "none" => println!("{symbol} {message}"),
51            "monochrome" => println!("{} {}", symbol.bold(), message.bold()),
52            _ => println!("{} {}", style_symbol(symbol), caution(message)), // Color
53        }
54    }
55    #[cfg(not(feature = "clap"))]
56    {
57        println!("{} {}", style_symbol(symbol), caution(message));
58    }
59}
60
61/// Print a warning message with optional custom symbol
62///
63/// # Examples
64/// ```rust
65/// use supercli::warning;
66///
67/// warning!("This action cannot be undone"); // Uses default ⚠
68/// warning!("Critical warning!", "🚨"); // Uses custom symbol
69/// ```
70#[macro_export]
71macro_rules! warning {
72    ($msg:expr) => {
73        $crate::output::macros::warning_impl($msg, $crate::output::symbols::WARNING_SIGN)
74    };
75    ($msg:expr, $symbol:expr) => {
76        $crate::output::macros::warning_impl($msg, $symbol)
77    };
78}
79
80/// Internal implementation for info messages
81pub fn info_impl(message: &str, symbol: &str) {
82    #[cfg(feature = "clap")]
83    {
84        match crate::clap::get_output_style() {
85            "none" => println!("{symbol} {message}"),
86            "monochrome" => println!("{} {}", symbol.bold(), message.bold()),
87            _ => println!("{} {}", style_symbol(symbol), label(message)), // Color
88        }
89    }
90    #[cfg(not(feature = "clap"))]
91    {
92        println!("{} {}", style_symbol(symbol), label(message));
93    }
94}
95
96/// Print an info message with optional custom symbol
97///
98/// # Examples
99/// ```rust
100/// use supercli::info;
101///
102/// info!("Processing files..."); // Uses default ℹ
103/// info!("Scanning files...", "🔍"); // Uses custom symbol
104/// info!("Using parallel processing...", "⚡"); // Uses custom symbol
105/// ```
106#[macro_export]
107macro_rules! info {
108    ($msg:expr) => {
109        $crate::output::macros::info_impl($msg, $crate::output::symbols::INFORMATION)
110    };
111    ($msg:expr, $symbol:expr) => {
112        $crate::output::macros::info_impl($msg, $symbol)
113    };
114}
115
116/// Internal implementation for error messages
117pub fn error_impl(message: &str, symbol: &str) {
118    #[cfg(feature = "clap")]
119    {
120        match crate::clap::get_output_style() {
121            "none" => println!("{symbol} {message}"),
122            "monochrome" => println!("{} {}", symbol.bold(), message.bold()),
123            _ => println!("{} {}", style_symbol(symbol), failure(message)), // Color
124        }
125    }
126    #[cfg(not(feature = "clap"))]
127    {
128        println!("{} {}", style_symbol(symbol), failure(message));
129    }
130}
131
132/// Print an error message with optional custom symbol
133///
134/// # Examples
135/// ```rust
136/// use supercli::error;
137///
138/// error!("Configuration file not found"); // Uses default ✗
139/// error!("Critical error occurred!", "💥"); // Uses custom symbol
140/// ```
141#[macro_export]
142macro_rules! error {
143    ($msg:expr) => {
144        $crate::output::macros::error_impl($msg, $crate::output::symbols::CROSS_MARK)
145    };
146    ($msg:expr, $symbol:expr) => {
147        $crate::output::macros::error_impl($msg, $symbol)
148    };
149}