Skip to content

Instantly share code, notes, and snippets.

@Reimerei
Created November 12, 2015 13:29
Show Gist options
  • Save Reimerei/f183f6ce1cb60085c625 to your computer and use it in GitHub Desktop.
Save Reimerei/f183f6ce1cb60085c625 to your computer and use it in GitHub Desktop.
defmacro defbang({ name, _, args }) do
unless args |> is_list do
args = []
end
quote bind_quoted: [name: Macro.escape(name), args: Macro.escape(args)] do
def unquote(to_string(name) <> "!" |> String.to_atom)(unquote_splicing(args)) do
case unquote(name)(unquote_splicing(args)) do
:ok ->
:ok
{ :ok, result } ->
result
{ :error, reason } ->
raise Socket.Error, reason: reason
end
end
end
end
defmacro defbang({ name, _, args }, to: mod) do
unless args |> is_list do
args = []
end
quote bind_quoted: [mod: Macro.escape(mod), name: Macro.escape(name), args: Macro.escape(args)] do
def unquote(to_string(name) <> "!" |> String.to_atom)(unquote_splicing(args)) do
case unquote(mod).unquote(name)(unquote_splicing(args)) do
:ok ->
:ok
{ :ok, result } ->
result
{ :error, reason } ->
raise Socket.Error, reason: reason
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment