use cu::cli::printer::{PRINTER, PrintPayload};
use cu::lv;
#[macro_export]
#[cfg(feature = "print")]
macro_rules! print {
($($fmt_args:tt)*) => {{
$crate::cli::__print_with_level($crate::lv::P, format_args!($($fmt_args)*));
}}
}
#[macro_export]
#[cfg(feature = "print")]
macro_rules! hint {
($($fmt_args:tt)*) => {{
$crate::cli::__print_with_level($crate::lv::H, format_args!($($fmt_args)*));
}}
}
#[macro_export]
#[cfg(feature = "print")]
macro_rules! custom_print {
(
$level:expr, $level_char_control:expr, $level_char:expr,
$sep_char_control:expr, $sep_char:expr, $text_control:expr,
$($fmt_args:tt)*
) => {{
$crate::cli::__print_payload_with_level(
$level,
$level_char_control,
$level_char,
$sep_char_control,
$sep_char,
$text_control,
format_args!($($fmt_args)*)
);
}};
}
#[cfg(all(feature = "prompt", not(feature = "coroutine")))]
#[macro_export]
macro_rules! prompt {
($($fmt_args:tt)*) => {{
$crate::cli::prompt(format!($($fmt_args)*)).or_cancel().run()
}};
}
#[cfg(all(feature = "prompt", feature = "coroutine"))]
#[macro_export]
macro_rules! prompt {
(async $($fmt_args:tt)*) => {{
$crate::cli::prompt(format!($($fmt_args)*)).or_cancel().co_run().await
}};
($($fmt_args:tt)*) => {{
$crate::cli::prompt(format!($($fmt_args)*)).or_cancel().run()
}};
}
#[cfg(all(feature = "prompt", not(feature = "coroutine")))]
#[macro_export]
macro_rules! yesno {
($($fmt_args:tt)*) => {{
$crate::cli::yesno(format!($($fmt_args)*)).run()
}};
}
#[cfg(all(feature = "prompt", feature = "coroutine"))]
#[macro_export]
macro_rules! yesno {
(async $($fmt_args:tt)*) => {{
$crate::cli::yesno(format!($($fmt_args)*)).co_run().await
}};
($($fmt_args:tt)*) => {{
$crate::cli::yesno(format!($($fmt_args)*)).run()
}};
}
#[doc(hidden)]
pub fn __print_with_level(lv: lv::Lv, message: std::fmt::Arguments<'_>) {
if !lv.can_print(lv::PRINT_LEVEL.get()) {
return;
}
let message = format!("{message}");
if let Ok(mut printer) = PRINTER.lock() {
if let Some(printer) = printer.as_mut() {
printer.print_message(lv, &message);
}
}
}
#[doc(hidden)]
pub fn __print_payload_with_level(
lv: lv::Lv,
mut level_char_control: &'static str,
level_char: char,
mut sep_char_control: &'static str,
sep_char: char,
mut text_control: &'static str,
message: std::fmt::Arguments<'_>,
) {
if !lv.can_print(lv::PRINT_LEVEL.get()) {
return;
}
if !lv::color_enabled() {
level_char_control = "";
sep_char_control = "";
text_control = "";
}
let message = format!("{message}");
let payload = PrintPayload {
level_char_control,
level_char,
sep_char_control,
sep_char,
text_control,
message: &message,
};
if let Ok(mut printer) = PRINTER.lock() {
if let Some(printer) = printer.as_mut() {
printer.print_payload(payload);
}
}
}