Packages
zoi
0.17.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/types/extend.ex
defmodule Zoi.Types.Extend do
@moduledoc false
def new(schema1, shema2, opts \\ [])
def new(
%Zoi.Types.Map{fields: fields1} = schema1,
%Zoi.Types.Map{fields: fields2},
_opts
)
when is_list(fields1) and is_list(fields2) do
fields = Keyword.merge(fields1, fields2)
Zoi.Types.Map.new(Map.new(fields),
unrecognized_keys: schema1.unrecognized_keys,
coerce: schema1.coerce,
empty_values: schema1.empty_values
)
end
def new(%Zoi.Types.Map{fields: fields1} = schema1, schema2, _opts)
when is_list(fields1) and is_map(schema2) and not is_struct(schema2) do
fields = Keyword.merge(fields1, Map.to_list(schema2))
Zoi.Types.Map.new(Map.new(fields),
unrecognized_keys: schema1.unrecognized_keys,
coerce: schema1.coerce,
empty_values: schema1.empty_values
)
end
def new(%Zoi.Types.Keyword{} = schema1, %Zoi.Types.Keyword{} = schema2, _opts) do
fields = Keyword.merge(schema1.fields, schema2.fields)
Zoi.Types.Keyword.new(fields,
unrecognized_keys: schema1.unrecognized_keys,
coerce: schema1.coerce,
empty_values: schema1.empty_values
)
end
def new(%Zoi.Types.Keyword{} = schema1, schema2, _opts) when is_list(schema2) do
fields = Keyword.merge(schema1.fields, schema2)
Zoi.Types.Keyword.new(fields,
unrecognized_keys: schema1.unrecognized_keys,
coerce: schema1.coerce,
empty_values: schema1.empty_values
)
end
def new(_schema1, _schema2, _opts) do
raise ArgumentError, "must be an object or keyword"
end
end