range_checker 0.1.0

derive-macro crate aimed to provide declarative bounds checking and filtering for structure.
Documentation
# range_checker

range_checker is a derive-macro crate aimed to provide declarative bounds checking and filtering for structure.

## Examples

```rust
use range_checker::Check;

#[derive(Debug, Default, Check)]
struct TestStruct {
    #[range(..=5)]
    pub v0: u8,
    #[range(-1.0..=5.0)]
    #[fallback(3.1)]
    v1: f32,
    #[filter(|x| x > 8.0)]
    #[fallback(9.9)]
    v2: f64,
    #[range(..-1)]
    #[fallback(|x| {println!("test fallback closure."); x - 5})]
    v3: isize,
}

fn main() {
    let a = TestStruct::default();

    if let Ok(_) = a.check() {
        todo!{}
    }
}
```

---

## Features

### **range**

Use `#[range(...)]` to detemine the range for named struct's field.

Multiple `#[range(...)]` will combined by `||`, which allowed to config any range you need.

### **filter**

Use `#[filter(#closure)]` to filter for named struct's field, `#closure: |#type_of_field| -> bool`.

Multiple `#[filter(#closure)]` will combined by `&&`.

`#[filter(#closure)]` will combined with `#[range(...)]` by `&&`.

### **fallback**
> Active with the `fn check_with_callback()`

Use  `#[fallback(#closure|#lit)]` to set fallback behavior for named struct's field, `#closure: |#type_of_field| -> #type_of_field`.

One field brokes it's range or filter with fallback attribute setted, `fn check_with_fallback()` will return `Ok(_)`.

---

## Check or CheckVervose

`range_checker::Check` will return `Err(())` immediately any field broke it's range or filter.

`range_checker::CheckVerbose` will check all fields and return detail information like `Err(Vec<Error>)` or `Ok(Vec<Error>)` when all of broken fields has a fallback attribute.