glimr/helpers/validation


Validation Helpers

Form validation utilities with built-in rules for common validation patterns including required fields, email format, length constraints, numeric ranges, and URL validation.

Types


File Rule Type

Defines validation rules that can be applied to file upload fields. Rules include required file checks, file size constraints (in KB), and allowed file extension validation.

pub type FileRule {
  FileRequired
  FileMinSize(Int)
  FileMaxSize(Int)
  FileExtension(List(String))
}

Constructors

  • FileRequired
  • FileMinSize(Int)
  • FileMaxSize(Int)
  • FileExtension(List(String))

Rule Type

Defines validation rules that can be applied to form fields. Rules include required field checks, format validation, length constraints, and numeric range validation.

pub type Rule {
  Required
  Email
  MinLength(Int)
  MaxLength(Int)
  Min(Int)
  Max(Int)
  Numeric
  Url
  Digits(Int)
  MinDigits(Int)
  MaxDigits(Int)
}

Constructors

  • Required
  • Email
  • MinLength(Int)
  • MaxLength(Int)
  • Min(Int)
  • Max(Int)
  • Numeric
  • Url
  • Digits(Int)
  • MinDigits(Int)
  • MaxDigits(Int)

ValidationError Type

Represents a validation error for a specific field, that contains the field name and a list of error messages. Multiple rules can fail for a single field, generating multiple messages.

pub type ValidationError {
  ValidationError(name: String, messages: List(String))
}

Constructors

  • ValidationError(name: String, messages: List(String))

Values

pub fn for(
  form: wisp.FormData,
  field_name: String,
  rules: List(Rule),
) -> Result(Nil, ValidationError)

Validate Field

Validates a single form field against a list of rules. Returns Ok(Nil) if all rules pass, or Error with the validation error containing all failed rule messages.


Example:

form |> validation.for("email", [Required, Email])
pub fn for_file(
  form: wisp.FormData,
  field_name: String,
  rules: List(FileRule),
) -> Result(Nil, ValidationError)

Validate File Field

Validates a single file upload field against a list of rules. Returns Ok(Nil) if all rules pass, or Error with the validation error containing all failed rule messages.


Example:

form |> validation.for_file("avatar", [FileRequired, FileMaxSize(2048)])
pub fn handle(
  rules: fn(wisp.FormData) -> Result(Nil, List(ValidationError)),
  req: route.RouteRequest,
  on_valid: fn(wisp.FormData) -> response.Response(wisp.Body),
) -> response.Response(wisp.Body)

Handle Form Validation

Validates form data and executes a callback on success. Automatically extracts form data from the request, runs validation rules, and returns a 422 error response on failure with formatted error messages.

pub fn response(
  errors: List(ValidationError),
) -> Result(Nil, List(ValidationError))

Convert Errors to Result

Converts a list of validation errors into a Result type. Returns Ok(Nil) if the error list is empty, or Error with the errors if any exist. Used internally by start function.

pub fn start(
  rules: List(Result(a, ValidationError)),
) -> Result(Nil, List(ValidationError))

Start Validation

Collects validation results from multiple field validations and returns a combined result. Returns Ok(Nil) if all rules pass, or Error with all validation errors if any fail.


Example:

validation.start([
  form |> validation.for("email", [Required, Email]),
  form |> validation.for("name", [Required, Min(2)]),
])
Search Document