okay

Package Version Hex Docs

Okay is a simple validation library, it provides a convenient to API to run validation checks at runtime.

gleam add okay@1
import okay

pub type User {
  User(id: Int, name: String, age: Int)
}

pub fn main() {
  let user = User(id: 1, name: "John", age: 20)

  let assert Ok(_) = okay.new()
  |> okay.field("age", okay.is_gt(user.age, 18))
  |> okay.field("name", okay.is_longer(user.name, 1))
  |> okay.run()

  let assert Error(validator) =
    okay.new()
    |> okay.field("age", okay.is_gt(user.age, 30))
    |> okay.field("name", okay.is_longer(user.name, 5))
    |> okay.run()

  let assert [first, second] = validator.failures
  io.debug(first) // ValidationError("age", IsGreaterFailure(value: 20, expected: 30))
  io.debug(second) // ValidationError("name", IsLongerFailure(value: "John", actual: 4, expected: 5))
}

It’s also possible to define custom validation functions:

import okay

pub type User {
  User(name: String, is_admin: True)
}

fn is_admin(user: User) -> okay.ValidationResult {
  case user.is_admin {
    True -> Ok(Nil)
    False -> Error(okay.CustomFailure("Expected user to be admin"))
  }
}

pub fn main() {
  let user = User(name: "John", is_admin: 20)

  let assert Ok(_) = okay.new()
  |> okay.field("is_admin", is_admin(user))
  |> okay.run()

  let assert Error(validator) =
    okay.new()
    |> okay.field("is_admin", is_admin(user))
    |> okay.run()

  let assert [first] = validator.failures
  io.debug(first) // ValidationError("is_admin", CustomFailure("Expected user to be admin"))
}

Further documentation can be found at https://hexdocs.pm/okay.

Development

gleam test  # Run the tests
Search Document