-module(yum@yaml@parser@block_sequence).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yum/yaml/parser/block_sequence.gleam").
-export([parser/2]).
-export_type([entry/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type entry() :: {entry, yum@yaml@node:node_(), yum@yaml@node:span()}.
-file("src/yum/yaml/parser/block_sequence.gleam", 61).
?DOC(false).
-spec entry_span(entry(), entry()) -> yum@yaml@node:span().
entry_span(First, Last) ->
{span, Start, _} = erlang:element(3, First),
{span, _, End} = yum@yaml@node:span(erlang:element(2, Last)),
{span, Start, End}.
-file("src/yum/yaml/parser/block_sequence.gleam", 49).
?DOC(false).
-spec sequence_node(list(entry())) -> yum@yaml@node:node_().
sequence_node(Entries) ->
Values = begin
_pipe = Entries,
gleam@list:map(_pipe, fun(Entry) -> erlang:element(2, Entry) end)
end,
First@1 = case Entries of
[First | _] -> First;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"yum/yaml/parser/block_sequence"/utf8>>,
function => <<"sequence_node"/utf8>>,
line => 51,
value => _assert_fail,
start => 1257,
'end' => 1289,
pattern_start => 1268,
pattern_end => 1279})
end,
Last = begin
_pipe@1 = Entries,
_pipe@2 = gleam@list:last(_pipe@1),
gleam@result:unwrap(_pipe@2, First@1)
end,
yum@yaml@node:new(
{sequence, Values},
entry_span(First@1, Last),
block_sequence
).
-file("src/yum/yaml/parser/block_sequence.gleam", 72).
?DOC(false).
-spec fail() -> nibble:parser(any(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
fail() ->
nibble:fail(<<"Expected a block sequence"/utf8>>).
-file("src/yum/yaml/parser/block_sequence.gleam", 68).
?DOC(false).
-spec null_at(yum@yaml@node:span()) -> yum@yaml@node:node_().
null_at(Span) ->
yum@yaml@node:new(null, Span, synthetic).
-file("src/yum/yaml/parser/block_sequence.gleam", 33).
?DOC(false).
-spec sequence_entry_parser(
integer(),
fun((integer()) -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()))
) -> nibble:parser(entry(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
sequence_entry_parser(Indent, Node_parser) ->
nibble:do(
nibble:token(hyphen),
fun(_) ->
nibble:do(
nibble:span(),
fun(Marker_span) ->
nibble:do(
nibble:optional(Node_parser(Indent)),
fun(Value) ->
_pipe@1 = {entry,
begin
_pipe = Value,
gleam@option:unwrap(
_pipe,
null_at(
yum@yaml@parser@span:from_lexer(
Marker_span
)
)
)
end,
yum@yaml@parser@span:from_lexer(Marker_span)},
nibble:return(_pipe@1)
end
)
end
)
end
).
-file("src/yum/yaml/parser/block_sequence.gleam", 15).
?DOC(false).
-spec parser(
integer(),
fun((integer()) -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()))
) -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
parser(Indent, Node_parser) ->
nibble:do(
nibble:sequence(
sequence_entry_parser(Indent, Node_parser),
yum@yaml@parser@indentation:block_separator_parser(Indent)
),
fun(Entries) -> case Entries of
[] ->
fail();
[_ | _] ->
_pipe = Entries,
_pipe@1 = sequence_node(_pipe),
nibble:return(_pipe@1)
end end
).