gloo/validate

Input validation combinators. validate.struct collects ALL field errors before returning — it never short-circuits.

validate.struct([
  validate.field("email", email, [validate.format("^[^@]+@[^@]+$")]),
  validate.field("name",  name,  [validate.max_length(100)]),
])
// -> Result(List(value), List(validate.Error))

Types

pub type Error {
  FieldError(field: String, message: String)
}

Constructors

  • FieldError(field: String, message: String)

Values

pub fn field(
  name: String,
  value: a,
  rules: List(fn(a) -> Result(Nil, String)),
) -> Result(a, List(Error))

Validate a single field against a list of rules. Runs every rule regardless of prior failures.

pub fn format(
  pattern: String,
) -> fn(String) -> Result(Nil, String)
pub fn gte(minimum: Int) -> fn(Int) -> Result(Nil, String)
pub fn length(n: Int) -> fn(String) -> Result(Nil, String)
pub fn lte(maximum: Int) -> fn(Int) -> Result(Nil, String)
pub fn max_length(n: Int) -> fn(String) -> Result(Nil, String)
pub fn required(
  field_name: String,
  value: option.Option(a),
) -> Result(a, List(Error))
pub fn struct(
  fields: List(Result(a, List(Error))),
) -> Result(List(a), List(Error))

Returns Ok(values) when every field passes, Error(all_errors) otherwise. Processes every field even after a failure — never short-circuits.

Search Document