Current section

Files

Jump to
combine lib combine.ex
Raw

lib/combine.ex

defmodule Combine do
@moduledoc """
Main entry point for the Combine API.
"""
alias Combine.ParserState
@type parser :: Combine.Parsers.Base.parser
@doc """
Given an input string and a parser, applies the parser to the input string,
and returns the results as a list, or an error tuple if an error occurs.
"""
@spec parse(String.t, parser) :: [term] | {:error, term}
def parse(input, parser) do
case parser.(%ParserState{input: input}) do
%ParserState{status: :ok, results: res} -> Enum.reverse(res)
%ParserState{error: res} -> {:error, res}
x -> {:error, {:fatal, x}}
end
end
end