lib/hologram/commons/parser.ex
defmodule Hologram.Commons.Parser do
@callback parse(String.t()) :: {:ok, term} | {:error, term}
defmacro __using__(_) do
quote do
@behaviour Hologram.Commons.Parser
def parse!(str) do
case parse(str) do
{:ok, ast} ->
ast
_ ->
raise """
Invalid code:
-----
#{str}
-----
"""
end
end
def parse_file(filepath) do
filepath
|> File.read!()
|> parse()
end
def parse_file!(filepath) do
filepath
|> File.read!()
|> parse!()
end
end
end
end