color_output/macro/
proc_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    ($level:expr, $color:expr, $bg_color:expr, $endl:expr, $($data:expr),*) => {{
73        use crate::*;
74        use std::fmt::*;
75        let binding: String = format!("[{} => {}]", current_time(), $level);
76        let mut time_output_builder: OutputBuilder<'_> = OutputBuilder::new();
77        let time_output: Output<'_> = time_output_builder
78            .text(&binding)
79            .blod(true)
80            .bg_color($bg_color)
81            .color(ColorType::Color256(0xffffff))
82            .build();
83        let mut text_output_builder: OutputBuilder<'_> = OutputBuilder::new();
84        let mut text_endl_output_builder: OutputBuilder<'_> = OutputBuilder::new();
85        let text_endl_output: Output<'_> = text_endl_output_builder.text("\n").endl(false).build();
86        let mut text: String = String::new();
87        $(
88            text.push_str(&$data.to_string());
89        )*
90        let mut lines_iter = text.lines().peekable();
91        while let Some(line) = lines_iter.next() {
92            let mut output_list_builder = OutputListBuilder::new();
93            output_list_builder.add(time_output.clone());
94            let text_output: Output<'_> = text_output_builder
95                .text(&line)
96                .blod(true)
97                .color($color)
98                .endl(false)
99                .build();
100            output_list_builder.add(text_output);
101            if lines_iter.peek().is_some() || $endl {
102                output_list_builder.add(text_endl_output.clone());
103            }
104            output_list_builder.run();
105        }
106    }};
107}
108
109#[macro_export]
110macro_rules! print_success {
111    ($($data:expr),*) => {
112        crate::print_message_common_handler!("success", ColorType::Rgb(0,255,0), ColorType::Rgb(0,255,0), false, $($data),*);
113    };
114}
115
116#[macro_export]
117macro_rules! print_warning {
118    ($($data:expr),*) => {
119        crate::print_message_common_handler!("warning", ColorType::Rgb(255, 255, 0), ColorType::Rgb(255, 255, 0), false, $($data),*);
120    };
121}
122
123#[macro_export]
124macro_rules! print_error {
125    ($($data:expr),*) => {
126        crate::print_message_common_handler!("error", ColorType::Rgb(255,0,0), ColorType::Rgb(255,0,0), false, $($data),*);
127    };
128}
129
130#[macro_export]
131macro_rules! println_success {
132    ($($data:expr),*) => {
133        crate::print_message_common_handler!("success", ColorType::Rgb(0,255,0), ColorType::Rgb(0,255,0), true, $($data),*);
134    };
135}
136
137#[macro_export]
138macro_rules! println_warning {
139    ($($data:expr),*) => {
140        crate::print_message_common_handler!("warning", ColorType::Rgb(255, 255, 0), ColorType::Rgb(255, 255, 0), true, $($data),*);
141    };
142}
143
144#[macro_export]
145macro_rules! println_error {
146    ($($data:expr),*) => {
147        crate::print_message_common_handler!("error", ColorType::Rgb(255,0,0), ColorType::Rgb(255,0,0), true, $($data),*);
148    };
149}