iprint 0.1.4

A simple debugging utility that prints indented text based on function call depth
Documentation
# 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.