color_output/macro/macro.rs
1/// Output macro
2///
3/// [Official Documentation](https://docs.ltpp.vip/COLOR-OUTPUT/),
4///
5/// # Parameters
6/// - `Output`: The output struct
7///
8/// # Code Example
9///
10/// ## Using the Struct
11///
12/// ```rust
13/// use color_output::*;
14/// output_macro!(Output {
15/// text: "test_proc_macro",
16/// color: ColorType::default(),
17/// bg_color: ColorType::Use(Color::Yellow),
18/// endl: true,
19/// ..Default::default()
20/// });
21/// ```
22///
23/// ## Using the Constructor
24///
25/// ```rust
26/// use color_output::*;
27/// output_macro!(OutputBuilder::new()
28/// .text("test_output_builder")
29/// .color(ColorType::Use(Color::Cyan))
30/// .blod(true)
31/// .endl(true)
32/// .build());
33/// ```
34///
35/// ## Multiple Inputs
36///
37/// ```rust
38/// use color_output::*;
39/// output_macro!(
40/// Output {
41/// text: "test_proc_macro",
42/// color: ColorType::default(),
43/// bg_color: ColorType::Use(Color::Yellow),
44/// endl: true,
45/// ..Default::default()
46/// },
47/// OutputBuilder::new()
48/// .text("test_output_builder1")
49/// .color(ColorType::Color256(0xffffff))
50/// .blod(true)
51/// .endl(true)
52/// .build(),
53/// OutputBuilder::new()
54/// .text("test_output_builder2")
55/// .color(ColorType::Color256(0xffffff))
56/// .blod(true)
57/// .endl(true)
58/// .build()
59/// );
60/// ```
61#[macro_export]
62macro_rules! output_macro {
63 ($($output:expr),*) => {
64 $(
65 $output.output();
66 )*
67 };
68}
69
70#[macro_export]
71macro_rules! print_message_common_handler {
72 ($color:expr, $bg_color:expr, $($data:expr),*) => {{
73 use crate::*;
74 use std::fmt::*;
75 let binding: String = format!("[{}]", time());
76 let mut time_output_builder: OutputBuilder<'_> = OutputBuilder::new();
77 let time_output: Output<'_> = time_output_builder
78 .text(&binding)
79 .blod(true)
80 .color($color)
81 .bg_color($bg_color)
82 .build();
83 let mut text_output_builder: OutputBuilder<'_> = OutputBuilder::new();
84 let mut text: String = String::new();
85 $(
86 text.push_str(&$data.to_string());
87 )*
88 let mut lines_iter = text.lines().peekable();
89 while let Some(line) = lines_iter.next() {
90 let mut output_list_builder = OutputListBuilder::new();
91 output_list_builder.add(time_output.clone());
92 let text_output: Output<'_> = text_output_builder
93 .text(&line)
94 .blod(true)
95 .endl(true)
96 .build();
97 output_list_builder.add(text_output);
98 output_list_builder.run();
99 }
100 }};
101}
102
103#[macro_export]
104macro_rules! println_success {
105 ($($data:expr),*) => {
106 crate::print_message_common_handler!(ColorType::Use(Color::White), ColorType::Use(Color::Green), $($data),*);
107 };
108}
109
110#[macro_export]
111macro_rules! println_warning {
112 ($($data:expr),*) => {
113 crate::print_message_common_handler!(ColorType::Use(Color::White), ColorType::Use(Color::Yellow), $($data),*);
114 };
115}
116
117#[macro_export]
118macro_rules! println_error {
119 ($($data:expr),*) => {
120 crate::print_message_common_handler!(ColorType::Use(Color::White), ColorType::Use(Color::Red), $($data),*);
121 };
122}