Packages
mazurka
0.3.29
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
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.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.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
hypermedia api toolkit
Current section
Files
Jump to
Current section
Files
lib/mazurka/resource/error.ex
defmodule Mazurka.Resource.Error do
defexception [:message, :state]
def message(%{message: message}) do
inspect(message)
end
defmacro error(mediatype, name, [do: block]) do
Mazurka.Compiler.Utils.register(mediatype, __MODULE__, block, name)
end
def compile(mediatype, block, globals, {_, _, [arg]}) do
quote do
unquote_splicing(globals[:param] || [])
unquote_splicing(globals[:let] || [])
unquote(arg) = prop(:error)
error = unquote(mediatype).handle_error(unquote(block))
^^Mazurka.Resource.Error.set_error(error)
end
end
def expand(ast, _) do
Mazurka.Compiler.Utils.postwalk(ast, fn(expr) ->
expr
|> Mazurka.Resource.Param.format(:prop)
|> Mazurka.Resource.Input.format(:prop)
|> Mazurka.Resource.Resource.format(:prop)
end)
end
def format_name({name, _meta, _args}) when is_atom(name) do
name
end
def set_error([message], %{private: private} = conn, _parent, _ref, _attrs) do
private = Map.put(private, :mazurka_error, true)
:erlang.error(__MODULE__.exception([message: message, state: %{conn | private: private}]))
end
end