glimr/forms/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)]),
])