# iprint-rs `iprint-rs` is a Rust utility library for indented printing and logging, designed to help you easily trace the execution of your code. The library provides a suite of macros for indented formatting (`iformat`), simplified indented printing (`iprintln`), and logging with varying levels (`itrace`, `idebug`, `iinfo`, `iwarn`, `ierror`). All features are geared to improve debugging and code tracing by automatically adjusting indentation based on the function call depth. ## ⚠️ Warning This library may not function correctly when compiled in release mode due to function inlining. It is recommended to use it in debug mode for accurate results. ## Features - **iprintln! macro**: This is an enhanced version of `println!`, adding automatic indentation. - **iformat! macro**: The `iformat` macro allows for custom indented formatting. - **call_depth! macro**: The `call_depth` macro provides the current depth of the function call stack, useful for custom logging or tracing solutions. - **indented logging**: Provides five levels of logging (`itrace`, `idebug`, `iinfo`, `iwarn`, `ierror`) that are feature-gated by the `log` feature. ## Installation To include `iprint-rs` in your project, add the following to your `Cargo.toml`: ```toml [dependencies] iprint = "0.1.4" # Use the latest version ``` To enable logging functionalities, update your `Cargo.toml` like so: ```toml [dependencies] iprint = { version = "0.1.4", features = ["log"] } ``` ## Usage ### iprintln! macro ```rust use iprint::iprintln; fn my_function() { iprintln!("This is like println! but with automatic indentation."); another_function(); iprintln!("This will be indented like the first iprintln!"); } fn another_function() { indent!("This message will be more indented."); } ``` ### iformat! macro ```rust use iprint::iformat; fn my_function() { let msg = iformat!("This will be indented based on call depth."); println!("{}", msg); } ``` ### call_depth! macro ```rust use iprint::call_depth; fn custom_logging() { let depth = call_depth!(); println!("Current call depth: {}", depth); } ``` ### logging functions (feature-gated) To use logging functions, make sure you have the `log` feature enabled. ```rust use iprint::iinfo; fn yet_another_function() { iinfo!("This is an informational message with automatic indentation."); } ``` ## License This project is licensed under the MIT License. See the [LICENSE.md](LICENSE.md) file for details.