Current section

Files

Jump to
parser_gleam src parser_gleam@parse_result.erl
Raw

src/parser_gleam@parse_result.erl

-module(parser_gleam@parse_result).
-compile(no_auto_import).
-export([success/3, error/3, with_expected/2, escalate/1, extend/2]).
-export_type([parse_success/2, parse_error/1]).
-type parse_success(KAM, KAN) :: {parse_success,
KAN,
parser_gleam@stream:stream(KAM),
parser_gleam@stream:stream(KAM)}.
-type parse_error(KAO) :: {parse_error,
parser_gleam@stream:stream(KAO),
list(binary()),
boolean()}.
-spec success(
KBE,
parser_gleam@stream:stream(KBF),
parser_gleam@stream:stream(KBF)
) -> {ok, parse_success(KBF, KBE)} | {error, parse_error(KBF)}.
success(Value, Next, Start) ->
{ok, {parse_success, Value, Next, Start}}.
-spec error(
parser_gleam@stream:stream(KBK),
gleam@option:option(list(binary())),
gleam@option:option(boolean())
) -> {ok, parse_success(KBK, any())} | {error, parse_error(KBK)}.
error(Input, Expected, Fatal) ->
{error,
{parse_error,
Input,
begin
_pipe = Expected,
gleam@option:unwrap(_pipe, [])
end,
begin
_pipe@1 = Fatal,
gleam@option:unwrap(_pipe@1, false)
end}}.
-spec with_expected(parse_error(KBS), list(binary())) -> parse_error(KBS).
with_expected(Err, Expected) ->
{parse_error, erlang:element(2, Err), Expected, erlang:element(4, Err)}.
-spec escalate(parse_error(KBW)) -> parse_error(KBW).
escalate(Err) ->
{parse_error, erlang:element(2, Err), erlang:element(3, Err), true}.
-spec extend(parse_error(KBZ), parse_error(KBZ)) -> parse_error(KBZ).
extend(Err1, Err2) ->
(erlang:element(2, get_semigroup()))(Err1, Err2).
-spec get_semigroup() -> fp_gl@models:semigroup(parse_error(any())).
get_semigroup() ->
{semigroup,
fun(X, Y) ->
case erlang:element(3, erlang:element(2, X))
< erlang:element(3, erlang:element(2, Y)) of
true ->
Y;
false ->
case erlang:element(3, erlang:element(2, X))
> erlang:element(3, erlang:element(2, Y)) of
true ->
X;
false ->
{parse_error,
erlang:element(2, X),
gleam@list:append(
erlang:element(3, X),
erlang:element(3, Y)
),
erlang:element(4, X)}
end
end
end}.