use crate::TreeBuilder;
pub fn default_tree() -> TreeBuilder {
thread_local! {
static DEFAULT_BUILDER: TreeBuilder = TreeBuilder::new();
}
DEFAULT_BUILDER.with(|f| f.clone())
}
#[macro_export]
macro_rules! add_leaf {
($($arg:tt)*) => {
if $crate::default::default_tree().is_enabled() {
$crate::default::default_tree().add_leaf(&format!($($arg)*))
}
};
}
#[macro_export]
macro_rules! add_leaf_value {
($value:expr) => {{
let v = $value;
if $crate::default::default_tree().is_enabled() {
$crate::default::default_tree().add_leaf(&format!("{}", &v));
}
v
}};
}
#[macro_export]
macro_rules! add_branch {
() => {
let _debug_tree_branch = if $crate::default::default_tree().is_enabled() {
$crate::default::default_tree().enter_scoped()
} else {
$crate::scoped_branch::ScopedBranch::none()
};
};
($($arg:tt)*) => {
let _debug_tree_branch = if $crate::default::default_tree().is_enabled() {
$crate::default::default_tree().add_branch(&format!($($arg)*))
} else {
$crate::scoped_branch::ScopedBranch::none()
};
};
}
#[cfg(test)]
mod test {
use crate::default_tree;
use crate::*;
#[test]
fn unnamed_branch() {
add_leaf!("1");
add_branch!();
add_leaf!("1.1");
{
add_branch!();
add_leaf!("1.1.1");
}
add_leaf!("1.2");
default_tree().peek_print();
assert_eq!(
"\
1
├╼ 1.1
│ └╼ 1.1.1
└╼ 1.2",
default_tree().string()
);
}
#[test]
fn named_branch() {
add_branch!("11");
{
add_branch!("11.1");
add_leaf!("11.1.1");
}
add_leaf!("11.2");
default_tree().peek_print();
assert_eq!(
"\
11
├╼ 11.1
│ └╼ 11.1.1
└╼ 11.2",
default_tree().string()
);
}
#[test]
fn leaf_with_value() {
let value = add_leaf_value!(10);
default_tree().peek_print();
assert_eq!("10", default_tree().string());
assert_eq!(10, value);
}
}