1#![allow(missing_docs)]
2use crate::styles::{paint, DIM, WHITE};
8
9const BAR: &str = "│";
10const S_INFO: &str = "●";
11const S_SUCCESS: &str = "◆";
12const S_STEP: &str = "◇";
13const S_WARN: &str = "▲";
14const S_ERROR: &str = "■";
15
16pub fn message<I>(iter: I, symbol: &str)
17where
18 I: IntoIterator,
19 I::Item: AsRef<str>,
20{
21 eprintln!("{}", paint(DIM, BAR));
22 let mut started = false;
23 for chunk in iter {
24 let chunk = chunk.as_ref();
25 for (i, line) in chunk.split('\n').enumerate() {
26 if i > 0 || started {
27 eprintln!();
28 eprint!("{} ", paint(DIM, BAR));
29 } else {
30 eprint!("{} ", symbol);
31 }
32 eprint!("{}", paint(WHITE, line));
33 started = true;
34 }
35 }
36 eprintln!();
37}
38
39pub fn info<I>(iter: I)
40where
41 I: IntoIterator,
42 I::Item: AsRef<str>,
43{
44 message(iter, &paint(super::settings::colors().accent, S_INFO));
45}
46pub fn success<I>(iter: I)
47where
48 I: IntoIterator,
49 I::Item: AsRef<str>,
50{
51 message(iter, &paint(super::settings::colors().success, S_SUCCESS));
52}
53pub fn step<I>(iter: I)
54where
55 I: IntoIterator,
56 I::Item: AsRef<str>,
57{
58 message(iter, &paint(super::settings::colors().success, S_STEP));
59}
60pub fn warn<I>(iter: I)
61where
62 I: IntoIterator,
63 I::Item: AsRef<str>,
64{
65 message(iter, &paint(super::settings::colors().error, S_WARN));
66}
67pub fn warning<I>(iter: I)
68where
69 I: IntoIterator,
70 I::Item: AsRef<str>,
71{
72 warn(iter);
73}
74pub fn error<I>(iter: I)
75where
76 I: IntoIterator,
77 I::Item: AsRef<str>,
78{
79 message(iter, &paint(super::settings::colors().cancel, S_ERROR));
80}