Skip to main content

src/yum@yaml@parser@block_sequence.erl

-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
    ).