// Wrappers around hprint(ln) that get disabled during release builds. This prevents us from
// getting stuck in an hprint when a debugger is detached.

#[cfg(debug_assertions)]
#[macro_export]
macro_rules! hprint {
    ($s:expr) => {
        cortex_m_semihosting::export::hstdout_str($s)
    };
    ($($tt:tt)*) => {
        cortex_m_semihosting::export::hstdout_fmt(format_args!($($tt)*))
    };
}
#[cfg(debug_assertions)]
#[macro_export]
macro_rules! hprintln {
    () => {
        cortex_m_semihosting::export::hstdout_str("\n")
    };
    ($s:expr) => {
        cortex_m_semihosting::export::hstdout_str(concat!($s, "\n"))
    };
    ($s:expr, $($tt:tt)*) => {
        cortex_m_semihosting::export::hstdout_fmt(format_args!(concat!($s, "\n"), $($tt)*))
    };
}

#[cfg(not(debug_assertions))]
#[macro_export]
macro_rules! hprint {
    () => { Result::<(), ()>::Ok(()) };
    ($s:expr, $($tt:tt)*) => { Result::<(), ()>::Ok(()) };
}
#[cfg(not(debug_assertions))]
#[macro_export]
macro_rules! hprintln {
    () => { Result::<(), ()>::Ok(()) };
    ($s:expr) => { Result::<(), ()>::Ok(()) };
    ($s:expr, $($tt:tt)*) => { Result::<(), ()>::Ok(()) };
}
