README.md

# verify
Ergonomic data validation library inspired by decode!

[![Package Version](https://img.shields.io/hexpm/v/verify)](https://hex.pm/packages/verify)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/verify/)

```sh
gleam add verify
```
## Examples
### Simple Usage
```gleam
import verify

pub fn main() {
  let data = "hello, world"
  let verifier = {
    use <- verify.string_min_length(5)
    use <- verify.string_max_length(32)
    verify.finalize()
  }

  verify.run(data, verifier)
}
```
### Writing Your Own Custom Verifier
```gleam
import verify
import gleam/result
import gleam/list

pub type Item {
  Item(name: String, count: Int)
}

pub fn main() {
  let item = Item("bread", 20)
  let verifier = {
    use <- verify.custom(verify_item)
    verify.finalize()
  }

  verify.run(item, verifier)
}


fn verify_item(item: Item) -> Result(Nil, List(String)) {
  let name_verifier = {
    use <- verify.string_not_empty
    verify.finalize()
  }

  let count_verifier = {
    use <- verify.int_min_value(0)
    verify.finalize()
  }

  let name_result = verify.run(item.name, name_verifier)
  let count_result = verify.run(item.count, count_verifier)

  let errors = result.partition([name_result, count_result]).1
  case errors {
    [] -> Ok(Nil)
    _ -> Error(list.flatten(errors))
  }
}
```

Further documentation can be found at <https://hexdocs.pm/verify>.