Packages

https://dagger.io SDK for Elixir

Current section

Files

Jump to
dagger_ex lib dagger codegen elixir function.ex
Raw

lib/dagger/codegen/elixir/function.ex

defmodule Dagger.Codegen.Elixir.Function do
@moduledoc false
def format_module_name(name) when is_binary(name) do
name
|> Macro.camelize()
|> String.to_atom()
end
def format_var_name(name) when is_binary(name) do
format_name(name)
end
defp format_fun_name(name) when is_atom(name) do
name
|> to_string()
|> format_fun_name()
end
defp format_fun_name(name) when is_binary(name) do
format_name(name)
end
defp format_name(name) when is_binary(name) do
name
|> Macro.underscore()
|> String.to_atom()
end
def define(fun_name, args, guard \\ nil, body, opts \\ []) when is_list(args) do
fun_name = format_fun_name(fun_name)
doc = opts[:doc] |> doc_to_quote()
deprecated = opts[:deprecated] |> deprecated_to_quote()
fun = [
case guard do
nil ->
quote do
def unquote(fun_name)(unquote_splicing(args)) do
unquote(body)
end
end
guard ->
quote do
def unquote(fun_name)(unquote_splicing(args)) when unquote(guard) do
unquote(body)
end
end
end
]
quote do
(unquote_splicing(doc ++ deprecated ++ fun))
end
end
defp doc_to_quote(nil) do
[
quote do
@doc false
end
]
end
defp doc_to_quote(doc) when is_binary(doc) do
[
quote do
@doc unquote(doc)
end
]
end
defp deprecated_to_quote(nil), do: []
defp deprecated_to_quote(deprecated) do
[
quote do
@deprecated unquote(deprecated)
end
]
end
end