View Source Talos.Types.MapType (Talos v1.12.2)

MapType for validation maps

custom options:

* `required_any_one`: true/false, if true - validation check if map has any valid field
* `required_groups`: list("key1", "key2", ...), list of keys from required group,
 required group can be simple field or field with dependendencies,
 you need to specify all field from the group to check dependencies

Fields are tuples {key, type, options \ []}:

key - string or atom, key of map

type - Talos defined Type

options:

* `optional`: true/false, if false - there will be error on key missing
* `depends_on`: list("key1", "key2", ...), list of keys on which field depends,
  field pass validation only if this field and all dependent fields pass validation

For example:


  iex> import Talos
  iex> Talos.valid?(map(), %{foo: :bar})
  true
  iex> user_params = map(fields: [
  ...>  field(key: "email", type: string(min_length: 5, max_length: 255, regexp: ~r/.*@.*/)),
  ...>  field(key: "age", type: integer(gteq: 18, allow_nil: true)),
  ...>  field(key: "interests", type: list(type: string()), optional: true)
  ...> ])
  iex> Talos.valid?(user_params, %{})
  false
  iex> Talos.valid?(user_params, %{"email" => "bob@gmail.com", "age" => 30})
  true
  iex> Talos.valid?(user_params, %{"email" => "bob@gmail.com", "age" => 30, interests: ["elixir"]})
  true
  iex> deps = map(fields: [
  ...>  field(
  ...>   key: "lastname",
  ...>   type: string(),
  ...>   depends_on: ["birthdate", "firstname"]
  ...>  ),
  ...>  field(
  ...>   key: "firstname",
  ...>   type: string(),
  ...>   depends_on: ["birthdate", "lastname"]
  ...>  ),
  ...>  field(
  ...>   key: "birthdate",
  ...>   type: string(),
  ...>   depends_on: ["lastname", "firstname"]
  ...>  )
  ...>  ])
  iex> Talos.valid?(deps, %{})
  false
  iex> Talos.valid?(deps, %{"firstname" => "John", "lastname" => "Galt"})
  false
  iex> Talos.valid?(deps, %{"firstname" => "John", "lastname" => "Galt", "birthdate" => "1957-01-01"})
  true

Summary

Types

@type t() :: %{
  __struct__: atom(),
  allow_nil: boolean(),
  allow_blank: boolean(),
  required_any_one: boolean(),
  required_groups: list(),
  fields: [Talos.Types.MapType.Field.t()] | nil
}

Functions

Callback implementation for Talos.Types.errors/2.

@spec permit(t(), any()) :: any()
@spec valid?(t(), any()) :: boolean()

Callback implementation for Talos.Types.valid?/2.