| use crate::TreeBuilder; |
| |
| /// Returns the default tree for the current thread |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// use debug_tree::default_tree; |
| /// default_tree().add_leaf("A new leaf"); |
| /// assert_eq!("A new leaf", default_tree().peek_string()); |
| /// ``` |
| pub fn default_tree() -> TreeBuilder { |
| thread_local! { |
| static DEFAULT_BUILDER: TreeBuilder = TreeBuilder::new(); |
| } |
| DEFAULT_BUILDER.with(|f| f.clone()) |
| } |
| |
| /// Adds a leaf to the default tree with the given text and formatting arguments |
| /// |
| /// # Arguments |
| /// * `text...` - Formatted text arguments, as per `format!(...)`. |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// #[macro_use] |
| /// use debug_tree::{default_tree, add_leaf}; |
| /// fn main() { |
| /// add_leaf!("A {} leaf", "new"); |
| /// assert_eq!("A new leaf", &default_tree().peek_string()); |
| /// } |
| /// ``` |
| #[macro_export] |
| macro_rules! add_leaf { |
| ($($arg:tt)*) => { |
| if $crate::default::default_tree().is_enabled() { |
| $crate::default::default_tree().add_leaf(&format!($($arg)*)) |
| } |
| }; |
| } |
| |
| /// Adds the value as a leaf to the default tree. |
| /// |
| /// Returns the given `value` argument. |
| /// |
| /// # Arguments |
| /// * `value` - An expression that implements the `Display` trait. |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// #[macro_use] |
| /// use debug_tree::{default_tree, add_leaf_value}; |
| /// fn main() { |
| /// let value = add_leaf_value!(10); |
| /// assert_eq!("10", &default_tree().string()); |
| /// assert_eq!(10, value); |
| /// } |
| /// ``` |
| #[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 |
| }}; |
| } |
| |
| /// Adds a scoped branch to the default tree with the given text and formatting arguments |
| /// The branch will be exited at the end of the current block. |
| /// |
| /// # Arguments |
| /// * `text...` - Formatted text arguments, as per `format!(...)`. |
| /// |
| /// # Example |
| /// |
| /// ``` |
| /// #[macro_use] |
| /// use debug_tree::{default_tree, add_branch, add_leaf}; |
| /// fn main() { |
| /// { |
| /// add_branch!("New {}", "Branch"); // _branch enters scope |
| /// // tree is now pointed inside new branch. |
| /// add_leaf!("Child of {}", "Branch"); |
| /// // Block ends, so tree exits the current branch. |
| /// } |
| /// add_leaf!("Sibling of {}", "Branch"); |
| /// assert_eq!("\ |
| /// New Branch |
| /// └╼ Child of Branch |
| /// Sibling of Branch" , &default_tree().string()); |
| /// } |
| /// ``` |
| #[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); |
| } |
| } |