Current section

37 Versions

Jump to

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,