Packages
cqrs_tools
0.3.4
0.5.28
0.5.27
0.5.26
0.5.25
0.5.24
0.5.23
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
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.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.1
0.1.0
A collection of handy Elixir macros for CQRS applications.
Current section
Files
Jump to
Current section
Files
lib/cqrs/guards.ex
defmodule Cqrs.Guards do
@moduledoc false
alias Cqrs.{InvalidCommandError, InvalidDispatcherError, InvalidQueryError, InvalidRouterError}
def ensure_is_struct!(module) do
unless exports_function?(module, :__struct__, 0) do
raise "#{module |> Module.split() |> Enum.join(".")} should be a valid struct."
end
end
def ensure_is_command!(module) do
unless exports_function?(module, :__command__, 0) do
raise InvalidCommandError, command: module
end
end
def ensure_is_query!(module) do
unless exports_function?(module, :__query__, 0) do
raise InvalidQueryError, query: module
end
end
def ensure_is_commanded_router!(module) do
unless exports_function?(module, :__registered_commands__, 0) do
raise InvalidRouterError, router: module
end
end
def ensure_is_dispatcher!(module) do
unless exports_function?(module, :dispatch, 2) do
raise InvalidDispatcherError, dispatcher: module
end
end
defp exports_function?(module, fun, arity) do
case Code.ensure_compiled(module) do
{:module, _} -> function_exported?(module, fun, arity)
_ -> false
end
end
end