Skip to main content

src/yum@yaml@parser@flow_collection.erl

-module(yum@yaml@parser@flow_collection).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yum/yaml/parser/flow_collection.gleam").
-export([parser/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).

-file("src/yum/yaml/parser/flow_collection.gleam", 219).
?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/flow_collection.gleam", 205).
?DOC(false).
-spec mapping_node(
    list({yum@yaml@node:node_(), yum@yaml@node:node_()}),
    yum@yaml@node:span()
) -> yum@yaml@node:node_().
mapping_node(Entries, Default_span) ->
    Mapping_span = case Entries of
        [] ->
            Default_span;

        [First | _] ->
            Last = begin
                _pipe = Entries,
                _pipe@1 = gleam@list:last(_pipe),
                gleam@result:unwrap(_pipe@1, First)
            end,
            {First_key, _} = First,
            {_, Last_value} = Last,
            yum@yaml@parser@span:enclosing(First_key, Last_value)
    end,
    yum@yaml@node:new({mapping, Entries}, Mapping_span, flow_mapping).

-file("src/yum/yaml/parser/flow_collection.gleam", 168).
?DOC(false).
-spec plain_mapping_key_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
plain_mapping_key_parser() ->
    nibble:do(
        nibble:take_map(
            <<"Expected a plain mapping key"/utf8>>,
            fun(Tok) -> case Tok of
                    {mapping_key, Value} ->
                        yum@yaml@parser@scalar:parse(Value);

                    _ ->
                        none
                end end
        ),
        fun(Kind) ->
            nibble:do(
                nibble:span(),
                fun(Token_span) ->
                    _pipe = yum@yaml@node:new(
                        Kind,
                        yum@yaml@parser@span:from_lexer(Token_span),
                        plain_scalar
                    ),
                    nibble:return(_pipe)
                end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 60).
?DOC(false).
-spec comma_then(
    nibble:parser(NDE, yum@yaml@token:token(), yum@yaml@lexer@context:context())
) -> nibble:parser(NDE, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
comma_then(Parser) ->
    _pipe = begin
        nibble:do(nibble:token(comma), fun(_) -> Parser end)
    end,
    nibble:backtrackable(_pipe).

-file("src/yum/yaml/parser/flow_collection.gleam", 49).
?DOC(false).
-spec comma_separated(
    nibble:parser(NCW, yum@yaml@token:token(), yum@yaml@lexer@context:context())
) -> nibble:parser(list(NCW), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
comma_separated(Parser) ->
    _pipe = begin
        nibble:do(
            Parser,
            fun(First) ->
                nibble:do(
                    nibble:many(comma_then(Parser)),
                    fun(Rest) -> nibble:return([First | Rest]) end
                )
            end
        )
    end,
    nibble:'or'(_pipe, []).

-file("src/yum/yaml/parser/flow_collection.gleam", 105).
?DOC(false).
-spec compact_implicit_mapping_or_node_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
compact_implicit_mapping_or_node_parser() ->
    nibble:do(
        flow_node_parser(),
        fun(Key) ->
            nibble:do(
                nibble:optional(mapping_value_parser()),
                fun(Value) -> case Value of
                        {some, Value@1} ->
                            _pipe = mapping_node(
                                [{Key, Value@1}],
                                yum@yaml@node:span(Key)
                            ),
                            nibble:return(_pipe);

                        none ->
                            nibble:return(Key)
                    end end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 94).
?DOC(false).
-spec compact_plain_mapping_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
compact_plain_mapping_parser() ->
    nibble:do(
        plain_mapping_key_parser(),
        fun(Key) ->
            nibble:do(
                begin
                    _pipe = flow_node_parser(),
                    nibble:'or'(_pipe, null_at(yum@yaml@node:span(Key)))
                end,
                fun(Value) ->
                    _pipe@1 = mapping_node(
                        [{Key, Value}],
                        yum@yaml@node:span(Key)
                    ),
                    nibble:return(_pipe@1)
                end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 87).
?DOC(false).
-spec compact_empty_key_mapping_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
compact_empty_key_mapping_parser() ->
    nibble:do(
        mapping_value_parser(),
        fun(Value) ->
            _pipe = mapping_node(
                [{null_at(yum@yaml@node:span(Value)), Value}],
                yum@yaml@node:span(Value)
            ),
            nibble:return(_pipe)
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 77).
?DOC(false).
-spec compact_explicit_mapping_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
compact_explicit_mapping_parser() ->
    nibble:do(
        nibble:token(question_mark),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Marker_span) ->
                    nibble:do(
                        flow_node_parser(),
                        fun(Key) ->
                            nibble:do(
                                mapping_value_parser(),
                                fun(Value) ->
                                    _pipe = mapping_node(
                                        [{Key, Value}],
                                        yum@yaml@parser@span:from_lexer(
                                            Marker_span
                                        )
                                    ),
                                    nibble:return(_pipe)
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 68).
?DOC(false).
-spec sequence_entry_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
sequence_entry_parser() ->
    nibble:one_of(
        [compact_explicit_mapping_parser(),
            compact_empty_key_mapping_parser(),
            compact_plain_mapping_parser(),
            compact_implicit_mapping_or_node_parser()]
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 23).
?DOC(false).
-spec sequence_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
sequence_parser() ->
    nibble:do(
        nibble:token(open_sequence),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Start) ->
                    nibble:do(
                        comma_separated(sequence_entry_parser()),
                        fun(Entries) ->
                            nibble:do(
                                nibble:optional(nibble:token(comma)),
                                fun(_) ->
                                    nibble:do(
                                        nibble:token(close_sequence),
                                        fun(_) ->
                                            nibble:do(
                                                nibble:span(),
                                                fun(End) ->
                                                    _pipe = {sequence, Entries},
                                                    _pipe@1 = yum@yaml@node:new(
                                                        _pipe,
                                                        yum@yaml@parser@span:between(
                                                            Start,
                                                            End
                                                        ),
                                                        flow_sequence
                                                    ),
                                                    nibble:return(_pipe@1)
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 195).
?DOC(false).
-spec bare_flow_node_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
bare_flow_node_parser() ->
    nibble:one_of(
        [nibble:lazy(fun sequence_parser/0),
            nibble:lazy(fun mapping_parser/0),
            yum@yaml@parser@double_quoted:parser(),
            yum@yaml@parser@single_quoted:parser(),
            yum@yaml@parser@scalar:parser()]
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 191).
?DOC(false).
-spec flow_node_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
flow_node_parser() ->
    yum@yaml@parser@node_property:parser(bare_flow_node_parser()).

-file("src/yum/yaml/parser/flow_collection.gleam", 183).
?DOC(false).
-spec mapping_value_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
mapping_value_parser() ->
    nibble:do(
        nibble:token(colon),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Colon_span) -> _pipe = flow_node_parser(),
                    nibble:'or'(
                        _pipe,
                        null_at(yum@yaml@parser@span:from_lexer(Colon_span))
                    ) end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 158).
?DOC(false).
-spec key_mapping_entry_parser() -> nibble:parser({yum@yaml@node:node_(),
    yum@yaml@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
key_mapping_entry_parser() ->
    nibble:do(
        flow_node_parser(),
        fun(Key) ->
            nibble:do(
                begin
                    _pipe = mapping_value_parser(),
                    nibble:'or'(_pipe, null_at(yum@yaml@node:span(Key)))
                end,
                fun(Value) -> nibble:return({Key, Value}) end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 152).
?DOC(false).
-spec empty_key_mapping_entry_parser() -> nibble:parser({yum@yaml@node:node_(),
    yum@yaml@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
empty_key_mapping_entry_parser() ->
    nibble:do(
        mapping_value_parser(),
        fun(Value) ->
            nibble:return({null_at(yum@yaml@node:span(Value)), Value})
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 142).
?DOC(false).
-spec plain_mapping_entry_parser() -> nibble:parser({yum@yaml@node:node_(),
    yum@yaml@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
plain_mapping_entry_parser() ->
    nibble:do(
        plain_mapping_key_parser(),
        fun(Key) ->
            nibble:do(
                begin
                    _pipe = flow_node_parser(),
                    nibble:'or'(_pipe, null_at(yum@yaml@node:span(Key)))
                end,
                fun(Value) -> nibble:return({Key, Value}) end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 134).
?DOC(false).
-spec implicit_mapping_entry_parser() -> nibble:parser({yum@yaml@node:node_(),
    yum@yaml@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
implicit_mapping_entry_parser() ->
    nibble:one_of(
        [plain_mapping_entry_parser(),
            empty_key_mapping_entry_parser(),
            key_mapping_entry_parser()]
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 123).
?DOC(false).
-spec explicit_mapping_entry_parser() -> nibble:parser({yum@yaml@node:node_(),
    yum@yaml@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
explicit_mapping_entry_parser() ->
    nibble:do(
        nibble:token(question_mark),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Marker_span) -> _pipe = implicit_mapping_entry_parser(),
                    nibble:'or'(
                        _pipe,
                        {null_at(yum@yaml@parser@span:from_lexer(Marker_span)),
                            null_at(
                                yum@yaml@parser@span:from_lexer(Marker_span)
                            )}
                    ) end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 116).
?DOC(false).
-spec mapping_entry_parser() -> nibble:parser({yum@yaml@node:node_(),
    yum@yaml@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
mapping_entry_parser() ->
    nibble:one_of(
        [explicit_mapping_entry_parser(), implicit_mapping_entry_parser()]
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 36).
?DOC(false).
-spec mapping_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
mapping_parser() ->
    nibble:do(
        nibble:token(open_mapping),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Start) ->
                    nibble:do(
                        comma_separated(mapping_entry_parser()),
                        fun(Entries) ->
                            nibble:do(
                                nibble:optional(nibble:token(comma)),
                                fun(_) ->
                                    nibble:do(
                                        nibble:token(close_mapping),
                                        fun(_) ->
                                            nibble:do(
                                                nibble:span(),
                                                fun(End) ->
                                                    _pipe = {mapping, Entries},
                                                    _pipe@1 = yum@yaml@node:new(
                                                        _pipe,
                                                        yum@yaml@parser@span:between(
                                                            Start,
                                                            End
                                                        ),
                                                        flow_mapping
                                                    ),
                                                    nibble:return(_pipe@1)
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser/flow_collection.gleam", 14).
?DOC(false).
-spec parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
parser() ->
    nibble:lazy(
        fun() -> nibble:one_of([sequence_parser(), mapping_parser()]) end
    ).