# dir-iterator
Iterator that recursively scans and filters files from a directory.
## Usage
### Installation
Start using this library by running the following command in your *cargo* project directory.
```sh
cargo add dir-iterator
```
### Read a Directory Recursively
Read a directory by using `DirIterator::build_from_path(`*path*`)`:
```rs
use dir_iterator::*;
fn main() {
// read directory `src`
DirIterator::build_from_path("src")
// maybe maybe
.expect("path not found")
// print it out
.for_each(|e| println!("{:?}", e.file_name()));
}
```
### Read Current Directory Recursively
Read current directory by using `DirIterator::build_current()` is a little shorter because it will panic if current directory does not exist or can't be retrieved.
```rs
use dir_iterator::*;
fn main() {
// build a new iterator starting in the current directory
DirIterator::build_current()
// print each file name
.for_each(|e| println!("{:?}", e.file_name()));
}
```
You may use `DirIterator::try_build_current()` to get errors instead of panic.
### Filter Result with Wildcards
Filter the result with wildcards by using `exclude(`*wildcard*`)` and which generates a filter.
```rs
use dir_iterator::*;
fn main() {
DirIterator::build_current()
// filter all files which have extension `txt`
.filter(exclude("*.txt"))
.for_each(|e| println!("{:?}", e.file_name()));
}
```
### Ignore Folders When Scanning
To prevent some directories from being scanned at all you ca use `ignore(`*wildcard*`)`
```rs
use dir_iterator::*;
fn main() {
DirIterator::current()
// ignore target directory
.ignore("target")
// ignore all hidden directories
.ignore(".*")
// build iterator
.build()
// exclude all hidden files
.filter(exclude(".*"))
.for_each(|e| println!("{:?}", e.path()));
}
```