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)

Validator function type

pub type Validator(a) =
  fn(a) -> Result(a, 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 get_errors(changeset: Changeset(data)) -> List(FieldError)

Get all errors

pub fn is_valid(changeset: Changeset(data)) -> Bool

Check if changeset is valid

pub fn new(data: data) -> Changeset(data)

Create a new changeset from initial data

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 (simple check)

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)

pub fn validate_required(
  changeset: Changeset(data),
  field: String,
) -> Changeset(data)

Validate that a field is required (must be present in changes)

Search Document