Current section

Files

Jump to
minipeg lib minipeg failure.ex
Raw

lib/minipeg/failure.ex

defmodule Minipeg.Failure do
alias Minipeg.{Cache, Input}
@moduledoc ~S"""
A failure result
"""
defstruct cache: %Cache{}, input: %Input{}, reason: ""
@type t :: %__MODULE__{cache: Cache.t(), input: Input.t(), reason: binary()}
@spec fail(binary(), Input.t(), Cache.t()) :: t
def fail(reason, input, cache) do
%__MODULE__{cache: cache, input: input, reason: reason}
end
@spec format(t()) :: binary()
def format(%__MODULE__{input: input, reason: reason}) do
_format(input, reason, Map.get(input, :context, %{}))
end
@spec _format(Input.t(), binary(), map()) :: binary()
defp _format(input, reason, context) do
source_name = Map.get(context, :source_name, "<binary>")
"#{reason} #{source_name}:#{Input.report_position(input)}"
end
end
# SPDX-License-Identifier: Apache-2.0