fvm_std/
macros.rs

1///
2/// # Examples
3/// ```ignore
4/// use fvm_std::log;
5/// use fvm_std::types::LogLevel;
6/// log!(target: "test_target", LogLevel::INFO, "hello");
7/// log!(target: "test_target", LogLevel::INFO, "hello {}", 1);
8/// log!(LogLevel::INFO, "hello");
9/// log!(LogLevel::INFO, "hello {}", 1);
10/// log!("hello");
11/// log!("hello {}", 1);
12/// log!()
13/// ```
14///
15
16use cfg_if::cfg_if;
17
18cfg_if! {
19    if #[cfg(feature = "advance")] {
20        #[macro_export(local_inner_macros)]
21        macro_rules! log {
22            (target: $target:expr, $lvl:expr, $($key:ident = $value:expr),* ; $fmt:expr,  $($arg:tt)+) => {
23                $crate::advance::log($target.to_string().as_bytes(), __log_format_args!($fmt, $($arg)+).to_string().as_bytes(), $lvl);
24            };
25            (target: $target:expr, $lvl:expr, $($arg:tt)+) => ({
26                $crate::advance::log($target.to_string().as_bytes(), __log_format_args!($($arg)+).to_string().as_bytes(), $lvl);
27            });
28            ($lvl:expr, $($arg:tt)+) => ({
29                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $lvl, $($arg)+)
30            });
31            ($($arg:tt)+) => ({
32                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $crate::types::LogLevel::INFO, $($arg)+)
33            });
34            () => {
35                log!("")
36            }
37        }
38    } else {
39        #[macro_export(local_inner_macros)]
40        macro_rules! log {
41            (target: $target:expr, $lvl:expr, $($key:ident = $value:expr),* ; $fmt:expr,  $($arg:tt)+) => {
42                $crate::normal::log($target.to_string().as_bytes(), __log_format_args!($fmt, $($arg)+).to_string().as_bytes(), $lvl);
43            };
44            (target: $target:expr, $lvl:expr, $($arg:tt)+) => ({
45                $crate::normal::log($target.to_string().as_bytes(), __log_format_args!($($arg)+).to_string().as_bytes(), $lvl);
46            });
47            ($lvl:expr, $($arg:tt)+) => ({
48                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $lvl, $($arg)+)
49            });
50            ($($arg:tt)+) => ({
51                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $crate::types::LogLevel::INFO, $($arg)+)
52            });
53            () => {
54                log!("")
55            }
56        }
57    }
58}
59
60/// CRITICAL ERROR WARNING NOTICE INFO DEBUG
61///
62/// # Examples
63/// ```ignore
64/// use fvm_std::critical;
65/// fn main() {
66///  critical!("hello");
67///  critical!("hello {}", "critical");
68///  critical!();
69/// }
70/// ```
71///
72#[macro_export(local_inner_macros)]
73macro_rules! critical {
74    ($($arg:tt)+) => ({
75         log!($crate::types::LogLevel::CRITICAL, $($arg)+)
76    });
77    () => ({
78        log!($crate::types::LogLevel::CRITICAL, "")
79    });
80}
81
82///
83/// # Examples
84/// ```ignore
85/// use fvm_std::error;
86/// error!("hello");
87/// error!("hello {}", "error");
88/// error!();
89/// ```
90///
91#[macro_export(local_inner_macros)]
92macro_rules! error {
93    ($($arg:tt)+) => (
94        log!($crate::types::LogLevel::ERROR, $($arg)+)
95    );
96    () => (
97        log!($crate::types::LogLevel::ERROR, "")
98    );
99}
100
101///
102/// # Examples
103/// ```ignore
104/// use fvm_std::warning;
105/// warning!("hello");
106/// warning!("hello {}", "warning");
107/// warning!();
108/// ```
109///
110#[macro_export(local_inner_macros)]
111macro_rules! warning {
112    ($($arg:tt)+) => (
113        log!($crate::types::LogLevel::WARNING, $($arg)+)
114    );
115    () => (
116        log!($crate::types::LogLevel::WARNING, "")
117    );
118}
119
120///
121/// # Examples
122/// ```ignore
123/// use fvm_std::notice;
124/// notice!("hello");
125/// notice!("hello {}", "notice");
126/// notice!();
127/// ```
128///
129#[macro_export(local_inner_macros)]
130macro_rules! notice {
131    ($($arg:tt)+) => (
132        log!($crate::types::LogLevel::NOTICE, $($arg)+)
133    );
134    () => (
135        log!($crate::types::LogLevel::NOTICE, "")
136    );
137}
138
139///
140/// # Examples
141/// ```ignore
142/// use fvm_std::info;
143/// info!("hello");
144/// info!("hello {}", "info");
145/// info!();
146/// ```
147///
148#[macro_export(local_inner_macros)]
149macro_rules! info {
150    ($($arg:tt)+) => (
151        log!($crate::types::LogLevel::INFO, $($arg)+)
152    );
153    () => (
154        log!($crate::types::LogLevel::INFO, "")
155    );
156}
157
158///
159/// # Examples
160/// ```ignore
161/// use fvm_std::debug;
162/// debug!("hello");
163/// debug!("hello {}", "debug");
164/// debug!();
165/// ```
166///
167#[macro_export(local_inner_macros)]
168macro_rules! debug {
169    ($($arg:tt)+) => (
170        log!($crate::types::LogLevel::DEBUG, $($arg)+)
171    );
172    () => (
173        log!($crate::types::LogLevel::DEBUG, "")
174    );
175}
176
177#[doc(hidden)]
178#[macro_export]
179macro_rules! __log_format_args {
180    ($($args:tt)*) => {
181        format_args!($($args)*)
182    };
183}
184
185#[doc(hidden)]
186#[macro_export]
187macro_rules! __log_file {
188    () => {
189        file!()
190    };
191}
192
193#[doc(hidden)]
194#[macro_export]
195macro_rules! __log_line {
196    () => {
197        line!()
198    };
199}