Packages
mazurka
0.2.10
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/mediatype/hyperjson.ex
defmodule Mazurka.Mediatype.Hyperjson do
use Mazurka.Mediatype
def name do
Hyperjson
end
def content_types do
[{"application", "json", %{}, Mazurka.Format.JSON},
{"application", "hyper+json", %{}, Mazurka.Format.JSON},
{"application", "hyper+x-erlang-binary", %{}, Mazurka.Format.ERLANG_TERM},
{"application", "hyper+msgpack", %{}, Mazurka.Format.MSGPACK}]
end
def optional_types do
[{"application", "json", %{}, Mazurka.Format.JSON},
{"application", "x-erlang-binary", %{}, Mazurka.Format.ERLANG_TERM},
{"application", "msgpack", %{}, Mazurka.Format.MSGPACK}]
end
def format_affordance(affordance, props = %{"input" => _input}) do
%{
"method" => affordance.method,
"action" => to_string(affordance)
}
|> Dict.merge(props)
end
def format_affordance(%{method: "GET"} = affordance, props) do
%{
"href" => to_string(affordance)
}
|> Dict.merge(props || %{})
end
def format_affordance(affordance, props) do
%{
"method" => affordance.method,
"action" => to_string(affordance)
}
|> Dict.merge(props || %{})
end
defmacro handle_action(block) do
quote do
response = unquote(block)
if ^:erlang.is_map(response) do
^Dict.put(response, "href", Rels.self)
else
response
end
end
end
defmacro handle_affordance(affordance, props) do
quote do
affordance = unquote(affordance)
if affordance do
^Mazurka.Mediatype.Hyperjson.format_affordance(affordance, unquote(props))
else
affordance
end
end
end
defmacro handle_error(block) do
quote do
response = unquote(block) || %{}
if ^:erlang.is_map(response) do
response
|> ^Dict.put("href", Rels.self)
|> ^Dict.put_new("error", %{
"message" => "Internal server error"
})
else
response
end
end
end
end