quercus 0.1.1

Easy to use CLI tree for your branchy info.
Documentation
# quercus

*quercus* is the scientific genus name for oak trees.

This crate was inspired by [ptree](https://crates.io/crates/ptree).

## Main features

This crate allows you to create trees with many roots.

---

This crate does not have a syntax distinction for the first node/branch of a given root.

The crate also does not have a syntax distinction for nodes that do not have branches (leaves) or nodes that do.

This makes it easy to create a tree recursively, as the information is not needed when adding a new node.

---

This crate also provides a (small) variety of branch styles and a versatile indentation option that may be invoked spontaneously during the construction of the tree.

## Usage
The following code
```rust
let mut tree = Tree::new();

tree.node("Root");

tree.begin_branches();
    tree.node("Branch 1");
    tree.node("Branch 2");
tree.end_branches();

tree.prune();

println!("{tree}");
```
results in:
```bash
Root
├── Branch 1
└── Branch 2
```

For a node with many lines use the `node_many_lines()` command.
For example, the code
```rust
    let mut tree = Tree::new().style(PipeStyle::Double).indent(5);

    tree.node("Root");
    tree.begin_branches();
        tree.node_many_lines(&["Branch 1", "Some", "more", "information"]);
        tree.begin_branches();
            tree.node("Autumn leaf");
            tree.node("Spring leaf");
        tree.end_branches();

        tree.indent(0); // Change indentation

        tree.node("Branch 2");
        tree.begin_branches();
            tree.node("Summer leaf");
            tree.node("Winter (no leaf) :(");
        tree.end_branches();
    tree.end_branches();

    tree.prune_and_print();
```
results in:
```bash
Root
╠═════ Branch 1
║      Some
║      more
║      information
║      ╠═════ Autumn leaf
║      ╚═════ Spring leaf
╚ Branch 2
  ╠ Summer leaf
  ╚ Winter (no leaf) :(
```

## Appearance Options

### Indentation
The indentation of the branches can be set through the `indent()` command, which expects a `usize` integer.

This command can be invoked anywhere during the construction of the tree.


### Branch Style
The style of the branches can be set through the `style()` command, which expects a `PipeStyle`  `enum` variant.

Currently, the following variants are available:
* `PipeStyle::Simple` : `` `` `` ``
* `PipeStyle::Curvy` : `` `` `` ``
* `PipeStyle::Double` : `` `` `` ``
* `PipeStyle::Thick` : `` `` `` ``

This command, however, may only be invoked at the root level of the tree.

## Crate Examples

For an example that builds a tree recursively, run
```bash
$ cargo run --release --example fibonacci
```

This should yield the following output:
```bash
5
├─ 3
│  ├─ 2
│  │  ├─ 1
│  │  │  ├─ 1
│  │  │  ╰─ 0
│  │  ╰─ 1
│  ╰─ 1
│     ├─ 1
│     ╰─ 0
╰─ 2
   ├─ 1
   │  ├─ 1
   │  ╰─ 0
   ╰─ 1
```
---
For an example that uses the [colored](https://crates.io/crates/colored) crate as well as the `node_many_lines()` command, run
```bash
$ cargo run --release --example hierarchy
```

## License
This project is licensed under either
* Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
* MIT License ([LICENSE-MIT]LICENSE-MIT or https://opensource.org/licenses/MIT)