ExParamsSchema.ValueCaster (ex_params_schema v0.1.1)

Copy Markdown View Source

Recursively casts scalar values, arrays, and objects according to normalized type definitions.

This low-level module is shared by ExParamsSchema.Parser and default-value compilation. Use ExParamsSchema.parse/2 for normal input casting.

Summary

Functions

Casts a value to a normalized type.

Types

cast_error_path()

@type cast_error_path() :: [ExParamsSchema.ValidationError.path_segment()]

collected_detailed_cast_result()

@type collected_detailed_cast_result() ::
  {:ok, ExParamsSchema.value()} | {:error, [ExParamsSchema.ValidationError.t()]}

collected_field_cast_result()

@type collected_field_cast_result() ::
  {:ok, name :: atom(), value :: ExParamsSchema.value()}
  | {:error, [ExParamsSchema.ValidationError.t()]}

detailed_cast_result()

@type detailed_cast_result() ::
  {:ok, ExParamsSchema.value()}
  | {:error,
     {path :: cast_error_path(), reason :: ExParamsSchema.error_reason()}
     | ExParamsSchema.ValidationError.t()}

field_cast_result()

@type field_cast_result() ::
  {:ok, name :: atom(), value :: ExParamsSchema.value()}
  | {:error,
     {path :: cast_error_path(), reason :: ExParamsSchema.error_reason()}
     | ExParamsSchema.ValidationError.t()}

Functions

cast(value, type, options, reason)

Casts a value to a normalized type.

iex> ExParamsSchema.ValueCaster.cast(["1", 2], {:array, :integer, []}, [], :invalid_items)
{:ok, [1, 2]}

iex> fields = ExParamsSchema.Definition.compile_fields!([{:count, :integer, []}])
iex> ExParamsSchema.ValueCaster.cast(%{"count" => "3"}, {:object, fields}, [], :invalid_payload)
{:ok, %{count: 3}}

Returns nil unchanged when nullable: true. Values that cannot be cast are normalized to the supplied error reason.

iex> ExParamsSchema.ValueCaster.cast(nil, :integer, [nullable: true], :invalid_count)
{:ok, nil}
iex> ExParamsSchema.ValueCaster.cast("x", :integer, [], :invalid_count)
{:error, :invalid_count}