Skip to content

Commit 7ba3d8f

Browse files
authored
Merge pull request #116 from noaccOS/chore/type-t
chore: define type `t` for all custom types
2 parents 0386df0 + 0a6024c commit 7ba3d8f

20 files changed

+94
-32
lines changed

lib/astarte_core/interface.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#
1818

1919
defmodule Astarte.Core.Interface do
20-
use Ecto.Schema
20+
use TypedEctoSchema
2121
import Ecto.Changeset
2222

2323
alias Astarte.Core.CQLUtils
@@ -45,7 +45,7 @@ defmodule Astarte.Core.Interface do
4545
]
4646

4747
@primary_key false
48-
embedded_schema do
48+
typed_embedded_schema do
4949
field :interface_id, :binary
5050
field :name
5151
field :major_version, :integer

lib/astarte_core/interface/aggregation.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
defmodule Astarte.Core.Interface.Aggregation do
2020
use Ecto.Type
2121

22+
@type t :: :individual | :object
23+
2224
@interface_aggregation_individual 1
2325
@interface_aggregation_object 2
2426
@valid_atoms [

lib/astarte_core/interface/ownership.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
defmodule Astarte.Core.Interface.Ownership do
2020
use Ecto.Type
2121

22+
@type t :: :device | :server
23+
2224
@interface_ownership_device 1
2325
@interface_ownership_server 2
2426
@valid_atoms [

lib/astarte_core/interface/type.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
defmodule Astarte.Core.Interface.Type do
2020
use Ecto.Type
2121

22+
@type t :: :properties | :datastream
23+
2224
@interface_type_properties 1
2325
@interface_type_datastream 2
2426
@valid_atoms [

lib/astarte_core/interface_descriptor.ex

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,27 @@
1717
#
1818

1919
defmodule Astarte.Core.InterfaceDescriptor do
20+
use TypedStruct
21+
2022
alias Astarte.Core.Interface
2123
alias Astarte.Core.Interface.Aggregation
2224
alias Astarte.Core.Interface.Ownership
2325
alias Astarte.Core.Interface.Type
2426
alias Astarte.Core.InterfaceDescriptor
2527
alias Astarte.Core.StorageType
2628

27-
defstruct name: "",
28-
major_version: 0,
29-
minor_version: 0,
30-
type: nil,
31-
ownership: nil,
32-
aggregation: nil,
33-
interface_id: nil,
34-
automaton: nil,
35-
storage: nil,
36-
storage_type: nil
29+
typedstruct do
30+
field :name, String.t(), default: ""
31+
field :major_version, non_neg_integer(), default: 0
32+
field :minor_version, non_neg_integer(), default: 0
33+
field :type, Type.t()
34+
field :ownership, Ownership.t()
35+
field :aggregation, Aggregation.t()
36+
field :interface_id, :binary
37+
field :automaton, {%{}, %{}}
38+
field :storage, String.t()
39+
field :storage_type, StorageType.t()
40+
end
3741

3842
@doc """
3943
Deserializes an `%InterfaceDescriptor{}` from `db_result`.

lib/astarte_core/mapping.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ defmodule Astarte.Core.Mapping do
2020
@moduledoc """
2121
This module handles Interface Mappings using Ecto Changesets
2222
"""
23-
use Ecto.Schema
23+
use TypedEctoSchema
2424
import Ecto.Changeset
2525
alias Astarte.Core.CQLUtils
2626
alias Astarte.Core.Mapping
@@ -50,7 +50,7 @@ defmodule Astarte.Core.Mapping do
5050
]
5151

5252
@primary_key false
53-
embedded_schema do
53+
typed_embedded_schema do
5454
field :endpoint
5555
field :value_type, ValueType
5656
field :reliability, Reliability, default: :unreliable

lib/astarte_core/mapping/database_retention_policy.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
defmodule Astarte.Core.Mapping.DatabaseRetentionPolicy do
2020
use Ecto.Type
2121

22+
@type t :: :no_ttl | :use_ttl
23+
2224
@mapping_policy_no_ttl 1
2325
@mapping_policy_use_ttl 2
2426
@valid_atoms [

lib/astarte_core/mapping/reliability.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
defmodule Astarte.Core.Mapping.Reliability do
2020
use Ecto.Type
2121

22+
@type t :: :unreliable | :guaranteed | :unique
23+
2224
@mapping_reliability_unreliable 1
2325
@mapping_reliability_guaranteed 2
2426
@mapping_reliability_unique 3

lib/astarte_core/mapping/retention.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
defmodule Astarte.Core.Mapping.Retention do
2020
use Ecto.Type
2121

22+
@type t :: :discard | :volatile | :stored
23+
2224
@mapping_retention_discard 1
2325
@mapping_retention_volatile 2
2426
@mapping_retention_stored 3

lib/astarte_core/mapping/value_type.ex

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,22 @@
1919
defmodule Astarte.Core.Mapping.ValueType do
2020
use Ecto.Type
2121

22+
@type t ::
23+
:double
24+
| :integer
25+
| :boolean
26+
| :longinteger
27+
| :string
28+
| :binaryblob
29+
| :datetime
30+
| :doublearray
31+
| :integerarray
32+
| :booleanarray
33+
| :longintegerarray
34+
| :stringarray
35+
| :binaryblobarray
36+
| :datetimearray
37+
2238
@mapping_value_type_double 1
2339
@mapping_value_type_doublearray 2
2440
@mapping_value_type_integer 3

lib/astarte_core/storage_type.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
defmodule Astarte.Core.StorageType do
2020
use Ecto.Type
2121

22+
@type t ::
23+
:multi_interface_individual_properties_dbtable
24+
| :multi_interface_individual_datastream_dbtable
25+
| :one_individual_properties_dbtable
26+
| :one_individual_datastream_dbtable
27+
| :one_object_datastream_dbtable
28+
2229
@multi_interface_individual_properties_dbtable 1
2330
@multi_interface_individual_datastream_dbtable 2
2431
@one_individual_properties_dbtable 3

lib/astarte_core/triggers/data_trigger.ex

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,31 @@
1717
#
1818

1919
defmodule Astarte.Core.Triggers.DataTrigger do
20-
@enforce_keys [:trigger_targets]
21-
defstruct [
22-
:interface_id,
23-
:path_match_tokens,
24-
:value_match_operator,
25-
:known_value,
26-
:trigger_targets
27-
]
20+
use TypedStruct
21+
alias Astarte.Core.Triggers.SimpleTriggersProtobuf.AMQPTriggerTarget
22+
23+
@type amqp_trigger_target :: AMQPTriggerTarget.t()
24+
@type known_value :: term() | nil
25+
@type interface_id :: :any_interface | :binary
26+
@type path_match_tokens :: :any_endpoint | String.t()
27+
@type value_match_operator ::
28+
:ANY
29+
| :EQUAL_TO
30+
| :NOT_EQUAL_TO
31+
| :GREATER_THAN
32+
| :GREATER_OR_EQUAL_TO
33+
| :LESS_THAN
34+
| :LESS_OR_EQUAL_TO
35+
| :CONTAINS
36+
| :NOT_CONTAINS
37+
38+
typedstruct do
39+
field :interface_id, interface_id()
40+
field :path_match_tokens, path_match_tokens()
41+
field :value_match_operator, value_match_operator()
42+
field :known_value, known_value()
43+
field :trigger_targets, [amqp_trigger_target()], enforce: true
44+
end
2845

2946
def are_congruent?(trigger_a, trigger_b) do
3047
trigger_a.interface_id == trigger_b.interface_id and

lib/astarte_core/triggers/policy/error_type.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ defmodule Astarte.Core.Triggers.Policy.ErrorType do
2020
use Ecto.Type
2121
alias Astarte.Core.Triggers.Policy
2222

23+
@type t :: %{}
24+
2325
# a Json
2426
def type, do: :map
2527

lib/astarte_core/triggers/policy/handler.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#
1818

1919
defmodule Astarte.Core.Triggers.Policy.Handler do
20-
use Ecto.Schema
20+
use TypedEctoSchema
2121
import Ecto.Changeset
2222
alias Astarte.Core.Triggers.Policy
2323
alias Astarte.Core.Triggers.Policy.Handler
@@ -53,7 +53,7 @@ defmodule Astarte.Core.Triggers.Policy.Handler do
5353

5454
@derive Jason.Encoder
5555
@primary_key false
56-
embedded_schema do
56+
typed_embedded_schema do
5757
field :on, Policy.ErrorType
5858
field :strategy, :string, default: "discard"
5959
end

lib/astarte_core/triggers/policy/keyword_error.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#
1818

1919
defmodule Astarte.Core.Triggers.Policy.ErrorKeyword do
20-
use Ecto.Schema
20+
use TypedEctoSchema
2121
import Ecto.Changeset
2222

2323
@on_constants [
@@ -28,7 +28,7 @@ defmodule Astarte.Core.Triggers.Policy.ErrorKeyword do
2828

2929
@derive Jason.Encoder
3030
@primary_key false
31-
embedded_schema do
31+
typed_embedded_schema do
3232
field :keyword, :string
3333
end
3434

lib/astarte_core/triggers/policy/policy.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#
1818

1919
defmodule Astarte.Core.Triggers.Policy do
20-
use Ecto.Schema
20+
use TypedEctoSchema
2121
import Ecto.Changeset
2222

2323
alias Astarte.Core.Triggers.Policy
@@ -42,7 +42,7 @@ defmodule Astarte.Core.Triggers.Policy do
4242

4343
@derive Jason.Encoder
4444
@primary_key false
45-
embedded_schema do
45+
typed_embedded_schema do
4646
field :name
4747
field :maximum_capacity, :integer
4848
field :retry_times, :integer

lib/astarte_core/triggers/policy/range_error.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
#
1818

1919
defmodule Astarte.Core.Triggers.Policy.ErrorRange do
20-
use Ecto.Schema
20+
use TypedEctoSchema
2121
import Ecto.Changeset
2222

2323
@error_range 400..599
2424

2525
@derive Jason.Encoder
2626
@primary_key false
27-
embedded_schema do
27+
typed_embedded_schema do
2828
field :error_codes, {:array, :integer}
2929
end
3030

lib/astarte_core/triggers/simple_trigger_config.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ defmodule Astarte.Core.Triggers.SimpleTriggerConfig do
2020
@moduledoc """
2121
This module handles the functions for creating a `SimpleTriggerConfig` and converting it to and from a `TaggedSimpleTrigger`.
2222
"""
23-
use Ecto.Schema
23+
use TypedEctoSchema
2424

2525
import Ecto.Changeset
2626
alias Astarte.Core.CQLUtils
@@ -38,7 +38,7 @@ defmodule Astarte.Core.Triggers.SimpleTriggerConfig do
3838
alias Astarte.Core.Triggers.SimpleTriggersProtobuf.TriggerTargetContainer
3939

4040
@primary_key false
41-
embedded_schema do
41+
typed_embedded_schema do
4242
# Common
4343
field :type, :string
4444
field :on, :string

mix.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ defmodule Astarte.Core.Mixfile do
6060
{:cyanide, "~> 2.0"},
6161
{:ecto, "~> 3.4"},
6262
{:ecto_morph, "~> 0.1.23"},
63+
{:typed_ecto_schema, "~> 0.4"},
64+
{:typedstruct, "~> 0.5"},
6365
{:protobuf, "~> 0.12"},
6466
{:jason, "~> 1.2"},
6567
{:elixir_uuid, "~> 1.2"},

mix.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,7 @@
2323
"protobuf": {:hex, :protobuf, "0.12.0", "58c0dfea5f929b96b5aa54ec02b7130688f09d2de5ddc521d696eec2a015b223", [:mix], [{:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "75fa6cbf262062073dd51be44dd0ab940500e18386a6c4e87d5819a58964dc45"},
2424
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
2525
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
26+
"typed_ecto_schema": {:hex, :typed_ecto_schema, "0.4.1", "a373ca6f693f4de84cde474a67467a9cb9051a8a7f3f615f1e23dc74b75237fa", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm", "85c6962f79d35bf543dd5659c6adc340fd2480cacc6f25d2cc2933ea6e8fcb3b"},
27+
"typedstruct": {:hex, :typedstruct, "0.5.3", "d68ae424251a41b81a8d0c485328ab48edbd3858f3565bbdac21b43c056fc9b4", [:make, :mix], [], "hexpm", "b53b8186701417c0b2782bf02a2db5524f879b8488f91d1d83b97d84c2943432"},
2628
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
2729
}

0 commit comments

Comments
 (0)