forked from everx-labs/ever-node
-
Notifications
You must be signed in to change notification settings - Fork 0
/
macros.rs
71 lines (69 loc) · 2.3 KB
/
macros.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
* Copyright (C) 2019-2021 TON Labs. All Rights Reserved.
*
* Licensed under the SOFTWARE EVALUATION License (the "License"); you may not use
* this file except in compliance with the License.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific TON DEV software governing permissions and
* limitations under the License.
*/
#[macro_export]
macro_rules! dump {
($data: expr) => {
{
let mut dump = String::new();
for i in 0..$data.len() {
dump.push_str(
&format!(
"{:02x}{}",
$data[i],
if (i + 1) % 16 == 0 { '\n' } else { ' ' }
)
)
}
dump
}
};
(debug, $target:expr, $msg:expr, $data:expr) => {
if log::log_enabled!(log::Level::Debug) {
log::debug!(target: $target, "{}:\n{}", $msg, dump!($data))
}
};
(trace, $target:expr, $msg:expr, $data:expr) => {
if log::log_enabled!(log::Level::Trace) {
log::trace!(target: $target, "{}:\n{}", $msg, dump!($data))
}
}
}
#[macro_export]
macro_rules! CHECK {
($exp:expr) => {
// TODO: remove for production
if !($exp) {
return Err(failure::err_msg(format!("{} {}:{}", stringify!($exp), file!(), line!())))
}
};
($exp:expr, inited) => {
// TODO: remove for production
if $exp == &Default::default() {
return Err(failure::err_msg(format!("{} {}:{}", stringify!($exp), file!(), line!())))
}
};
($exp:expr, default) => {
// TODO: remove for production
if $exp != &Default::default() {
return Err(failure::err_msg(format!("{} {}:{}", stringify!($exp), file!(), line!())))
}
};
($exp1:expr, $exp2:expr) => {{
// TODO: remove for production
#[cfg(test)]
pretty_assertions::assert_eq!($exp1, $exp2);
if $exp1 != $exp2 {
return Err(failure::err_msg(format!("{} != {} {}:{}", stringify!($exp1), stringify!($exp2), file!(), line!())))
}
}};
}