Current section
37 Versions
Jump to
Current section
37 Versions
Compare versions
3
files changed
+41
additions
-5
deletions
| @@ -8,11 +8,11 @@ | |
| 8 8 | <<"lib/types/list_type.ex">>,<<"lib/types/map_type">>, |
| 9 9 | <<"lib/types/map_type/field.ex">>,<<"lib/types/fixed_type.ex">>, |
| 10 10 | <<"lib/types/map_type.ex">>,<<"lib/types/number_type.ex">>, |
| 11 | - <<"lib/types/enum_type.ex">>,<<"lib/types.ex">>,<<"lib/mix">>, |
| 12 | - <<"lib/helpers">>,<<"lib/helpers/schema_to_map.ex">>,<<".formatter.exs">>, |
| 13 | - <<"mix.exs">>,<<"README.md">>,<<"CHANGELOG.md">>]}. |
| 11 | + <<"lib/types/enum_type.ex">>,<<"lib/types.ex">>,<<"lib/field.ex">>, |
| 12 | + <<"lib/mix">>,<<"lib/helpers">>,<<"lib/helpers/schema_to_map.ex">>, |
| 13 | + <<".formatter.exs">>,<<"mix.exs">>,<<"README.md">>,<<"CHANGELOG.md">>]}. |
| 14 14 | {<<"licenses">>,[<<"MIT">>]}. |
| 15 15 | {<<"links">>,[{<<"GitHub">>,<<"https://github.com/CatTheMagician/talos">>}]}. |
| 16 16 | {<<"name">>,<<"talos">>}. |
| 17 17 | {<<"requirements">>,[]}. |
| 18 | - {<<"version">>,<<"1.6.2">>}. |
| 18 | + {<<"version">>,<<"1.6.3">>}. |
| @@ -0,0 +1,36 @@ | |
| 1 | + defmodule Talos.Field do |
| 2 | + @moduledoc false |
| 3 | + |
| 4 | + # Belongs mostly to MapType, and used for key-value pairs |
| 5 | + @deprecated "Module deprecated, use import Talos instead, will be removed in 1.7" |
| 6 | + @enforce_keys [:key, :type] |
| 7 | + defstruct [:key, :type, :description, :default_value, example_value: nil, optional: false] |
| 8 | + |
| 9 | + @type t :: %{ |
| 10 | + __struct__: atom, |
| 11 | + key: any, |
| 12 | + type: any, |
| 13 | + description: String.t(), |
| 14 | + default_value: any, |
| 15 | + example_value: any, |
| 16 | + optional: boolean |
| 17 | + } |
| 18 | + |
| 19 | + def valid?(%__MODULE__{} = field, expected_map_value) |
| 20 | + when is_map(expected_map_value) do |
| 21 | + {_key, errors} = errors(field, expected_map_value) |
| 22 | + |
| 23 | + errors in [%{}, []] |
| 24 | + end |
| 25 | + |
| 26 | + def errors(%__MODULE__{optional: is_optional} = field, expected_map_value) |
| 27 | + when is_map(expected_map_value) do |
| 28 | + is_key_missed = !Map.has_key?(expected_map_value, field.key) |
| 29 | + |
| 30 | + cond do |
| 31 | + is_key_missed && !is_optional -> {field.key, ["should exist"]} |
| 32 | + is_key_missed && is_optional -> {field.key, []} |
| 33 | + true -> {field.key, Talos.errors(field.type, expected_map_value[field.key])} |
| 34 | + end |
| 35 | + end |
| 36 | + end |
| @@ -4,7 +4,7 @@ defmodule Talos.MixProject do | |
| 4 4 | def project do |
| 5 5 | [ |
| 6 6 | app: :talos, |
| 7 | - version: "1.6.2", |
| 7 | + version: "1.6.3", |
| 8 8 | elixir: ">= 1.8.0", |
| 9 9 | build_embedded: Mix.env() == :prod, |
| 10 10 | start_permanent: Mix.env() == :prod, |