diff options
Diffstat (limited to 'src/term.rs')
-rw-r--r-- | src/term.rs | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/term.rs b/src/term.rs new file mode 100644 index 0000000..a2c9433 --- /dev/null +++ b/src/term.rs @@ -0,0 +1,101 @@ +use crate::error::{Error, Result}; +use crossterm::style::Color; +use lazy_static::lazy_static; +use minimad::mad_inline; +use std::io::Stderr; +use termimad::{mad_write_inline, MadSkin}; + +pub fn with_error_style<R, F>(skin: &mut MadSkin, f: F) -> Result<R> +where + F: FnOnce(&MadSkin, &mut Stderr) -> Result<R, termimad::Error>, +{ + (|| { + let err = &mut std::io::stderr(); + let p = skin.paragraph.clone(); + skin.paragraph.set_fg(Color::Red); + mad_write_inline!(err, skin, "✖ ")?; + let r: R = f(&skin, err)?; + skin.paragraph = p; + Ok::<R, termimad::Error>(r) + })() + .map_err(Error::from) +} +#[macro_export] +macro_rules! print_error { + ($skin: expr, $md: literal $(, $value: expr )* $(,)? ) => {{ + use lazy_static::lazy_static; + use minimad::mad_inline; + use crate::error::Error; + let err = &mut std::io::stderr(); + let p = $skin.paragraph.clone(); + $skin.paragraph.set_fg(crossterm::style::Color::Red); + termimad::mad_write_inline!(err, $skin, "✖ ").map_err(Error::from)?; + $skin.write_composite(err, mad_inline!($md $(, $value)*)).map_err(Error::from)?; + $skin.paragraph = p; + Ok::<(), Error>(()) + }}; +} + +#[macro_export] +macro_rules! print_notice { + ($skin: expr, $md: literal $(, $value: expr )* $(,)? ) => {{ + use lazy_static::lazy_static; + use minimad::mad_inline; + use crate::error::Error; + let err = &mut std::io::stderr(); + let p = $skin.paragraph.clone(); + $skin.paragraph.set_fg(crossterm::style::Color::Yellow); + termimad::mad_write_inline!(err, $skin, "➜ ").map_err(Error::from)?; + $skin.write_composite(err, mad_inline!($md $(, $value)*)).map_err(Error::from)?; + $skin.paragraph = p; + Ok::<(), Error>(()) + }}; +} + +#[macro_export] +macro_rules! print_success { + ($skin: expr, $md: literal $(, $value: expr )* $(,)? ) => {{ + use lazy_static::lazy_static; + use minimad::mad_inline; + use crate::error::Error; + let err = &mut std::io::stderr(); + let p = $skin.paragraph.clone(); + $skin.paragraph.set_fg(crossterm::style::Color::Green); + termimad::mad_write_inline!(err, $skin, "✔ ").map_err(Error::from)?; + $skin.write_composite(err, mad_inline!($md $(, $value)*)).map_err(Error::from)?; + $skin.paragraph = p; + Ok::<(), Error>(()) + }}; +} + +#[macro_export] +macro_rules! print_log { + ($skin: expr, $md: literal $(, $value: expr )* $(,)? ) => {{ + use lazy_static::lazy_static; + use minimad::mad_inline; + use crate::error::Error; + let err = &mut std::io::stderr(); + let p = $skin.paragraph.clone(); + $skin.paragraph.set_fg(crossterm::style::Color::Blue); + termimad::mad_write_inline!(err, $skin, "• ").map_err(Error::from)?; + $skin.write_composite(err, mad_inline!($md $(, $value)*)).map_err(Error::from)?; + $skin.paragraph = p; + Ok::<(), Error>(()) + }}; +} + +#[macro_export] +macro_rules! print_warn { + ($skin: expr, $md: literal $(, $value: expr )* $(,)? ) => {{ + use lazy_static::lazy_static; + use minimad::mad_inline; + use crate::error::Error; + let err = &mut std::io::stderr(); + let p = $skin.paragraph.clone(); + $skin.paragraph.set_fg(crossterm::style::Color::Magenta); + termimad::mad_write_inline!(err, $skin, "⚡").map_err(Error::from)?; + $skin.write_composite(err, mad_inline!($md $(, $value)*)).map_err(Error::from)?; + $skin.paragraph = p; + Ok::<(), Error>(()) + }}; +} |