Packages

ABNF parser for Elixir

Current section

Files

Jump to
abnf lib mix tasks abnf.generate.ex
Raw

lib/mix/tasks/abnf.generate.ex

defmodule Mix.Tasks.Abnf.Generate do
use Mix.Task
def run([src, dest]) do
src
|> Abnf.compile
|> write_code(dest)
end
def run([src, dest, name]) do
module_name = ensure_module_name(name)
src
|> Abnf.compile(module_name)
|> write_code(dest)
end
defp write_code(quoted_module, dest) do
module_code = Macro.to_string(quoted_module)
File.write!(dest, module_code)
IO.puts("Generated #{dest}")
end
defp ensure_module_name(name) when is_atom(name) do
name
end
defp ensure_module_name(name) when is_binary(name) do
module_name = cond do
String.starts_with?(name, "Elixir.") ->
name
true ->
Enum.join(["Elixir", name], ".")
end
String.to_atom(module_name)
end
end