summaryrefslogtreecommitdiffstats
path: root/src/term.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/term.rs')
-rw-r--r--src/term.rs101
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>(())
+ }};
+}