Skip to content

tlux/vx

Repository files navigation

Vx

Build Coverage Status Module Version Hex Docs License Last Updated

The Elixir schema validator.

Installation

The package can be installed by adding vx to your list of dependencies in mix.exs:

def deps do
  [
    {:vx, "~> 0.4.0"}
  ]
end

Usage

With Vx, you have the capability to define schemata for validating complex data effortlessly.

First, you need to define your schema.

schema = Vx.String.t()

After that, you can call Vx.validate/2 or Vx.validate!/2 to check if a given values matches:

Vx.validate(schema, "foo")
# :ok

When the value does not match, an error is returned (or raised, respectively), indicating the specific issue.

Vx.validate(schema, 123)
# {:error, %Vx.Error{...}}
Vx.validate!(schema, 123)
# ** (Vx.Error) must be a string

Additional constraints can be added to certain types by piping everything together:

Vx.Number.t()
|> Vx.Number.gteq(3)
|> Vx.Number.lt(7)

You can combine multiple types and constraints to validate more complex schemata:

Vx.Map.shape(%{
  "name" => Vx.String.t(),
  "age" => Vx.Number.t(),
  "hobbies" =>
    Vx.List.t(Vx.String.present())
    |> Vx.List.non_empty(),
  "type" => Vx.Enum.t(["user", "admin"]),
  "addresses" => Vx.List.t(Vx.Struct.t(Address))
})

Docs

Take a look at the documentation to find out available types and options.