PhoenixMicro.Schema.Validator (PhoenixMicro v1.0.0)

Copy Markdown View Source

Validation engine for PhoenixMicro.Schema.

Takes a list of field_def tuples {name, type, opts} and a raw map, and returns {:ok, normalised_map} or {:error, [{field, reason}]}.

This module is called internally by every schema module's generated validate/1 callback. You can also call it directly if you have field definitions at runtime:

fields = [
  {:amount_cents, :integer, required: true},
  {:currency,    :string,  required: true, default: "USD"}
]

PhoenixMicro.Schema.Validator.validate(fields, %{"amount_cents" => 999})
# => {:ok, %{"amount_cents" => 999, "currency" => "USD"}}

Summary

Functions

Returns a human-readable summary of validation errors.

Validates payload against the list of field definitions.

Types

field_def()

@type field_def() :: {atom(), PhoenixMicro.Schema.Field.field_type(), keyword()}

result()

@type result() :: {:ok, map()} | {:error, [validation_error()]}

validation_error()

@type validation_error() :: {atom(), String.t()}

Functions

format_errors(errors)

@spec format_errors([validation_error()]) :: String.t()

Returns a human-readable summary of validation errors.

PhoenixMicro.Schema.Validator.format_errors([{:amount_cents, "is required"}])
# => "amount_cents: is required"

validate(fields, payload)

@spec validate([field_def()], map()) :: result()

Validates payload against the list of field definitions.

Keys are normalised to strings. Missing required fields produce errors. Missing optional fields with defaults have defaults applied.