sparkling/changeset
Types
Represents a changeset with changes, errors, and validation state
pub type Changeset(data) {
Changeset(
data: data,
changes: dict.Dict(String, String),
errors: List(FieldError),
valid: Bool,
)
}
Constructors
-
Changeset( data: data, changes: dict.Dict(String, String), errors: List(FieldError), valid: Bool, )
Represents a validation error for a specific field
pub type FieldError {
FieldError(field: String, message: String)
}
Constructors
-
FieldError(field: String, message: String)
Values
pub fn add_error(
changeset: Changeset(data),
field: String,
message: String,
) -> Changeset(data)
Add an error to the changeset
pub fn apply(
changeset: Changeset(data),
) -> Result(Changeset(data), List(FieldError))
Apply changes to data (returns Result with errors if invalid)
pub fn format_errors(errors: List(FieldError)) -> String
Format errors as a human-readable string
pub fn get_change(
changeset: Changeset(data),
field: String,
) -> Result(String, Nil)
Get a change value by field name
pub fn get_changes(
changeset: Changeset(data),
) -> dict.Dict(String, String)
Get all changes as a dict
pub fn put_change(
changeset: Changeset(data),
field: String,
value: String,
) -> Changeset(data)
Put a change (string value) into the changeset
pub fn validate_email(
changeset: Changeset(data),
field: String,
) -> Changeset(data)
Helper: validate email format. Checks for a single “@” with non-empty local and domain parts, and at least one “.” in the domain part after “@”.
pub fn validate_format(
changeset: Changeset(data),
field: String,
check: fn(String) -> Bool,
message: String,
) -> Changeset(data)
Validate string format (simple pattern matching)
pub fn validate_length(
changeset: Changeset(data),
field: String,
min: option.Option(Int),
max: option.Option(Int),
) -> Changeset(data)
Validate string length (min and max)
pub fn validate_not_empty(
changeset: Changeset(data),
field: String,
) -> Changeset(data)
Helper: validate that a string is not empty
pub fn validate_number(
changeset: Changeset(data),
field: String,
min: option.Option(Int),
max: option.Option(Int),
) -> Changeset(data)
Validate number is within range (min and max)