Packages
zoi
0.2.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.9.0-rc.1
0.9.0-rc.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Zoi is a schema validation library for Elixir, designed to provide a simple and flexible way to define and validate data.
Current section
Files
Jump to
Current section
Files
lib/zoi/type.ex
defprotocol Zoi.Type do
@moduledoc ~S"""
Protocol for defining types in Zoi.
Types are used to validate and parse data according to a defined schema.
You can implement this protocol for custom types to handle specific validation and parsing logic.
## Example
To create a custom type, you can define a module and implement the `Zoi.Type` protocol:
defmodule StringBoolean do
use Zoi.Type.Def
# `apply_type/1` is a helper function that will create the struct with the given options.
def string_bool(opts \\ []) do
apply_type(opts)
end
defimpl Zoi.Type do
# This function is called to parse the input according to the schema.
def parse(schema, input, opts) when is_binary(input) do
{:ok, input}
end
def parse(schema, input, opts) when is_boolean(input) do
{:ok, input}
end
def parse(_schema, _input, _opts) do
{:error, "invalid string or boolean type"}
end
end
end
You can then use this type in your schema definitions and it will handle parsing and validation as defined.
iex> schema = StringBoolean.string_bool()
iex> Zoi.parse(schema, "hello world")
{:ok, "hello world"}
iex> Zoi.Type.parse(schema, true)
{:ok, true}
iex> Zoi.Type.parse(schema, 123)
{:error, %Zoi.Error{message: "invalid string or boolean type"}}
"""
def parse(schema, input, opts)
end