Skip to main content

src/yum@yaml@parser@block_mapping.erl

-module(yum@yaml@parser@block_mapping).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yum/yaml/parser/block_mapping.gleam").
-export([parser/2]).

-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/block_mapping.gleam", 160).
?DOC(false).
-spec mapping_node(list({yum@yaml@node:node_(), yum@yaml@node:node_()})) -> yum@yaml@node:node_().
mapping_node(Entries) ->
    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_mapping"/utf8>>,
                        function => <<"mapping_node"/utf8>>,
                        line => 161,
                        value => _assert_fail,
                        start => 4526,
                        'end' => 4558,
                        pattern_start => 4537,
                        pattern_end => 4548})
    end,
    Last = begin
        _pipe = Entries,
        _pipe@1 = gleam@list:last(_pipe),
        gleam@result:unwrap(_pipe@1, First@1)
    end,
    {First_key, _} = First@1,
    {_, Last_value} = Last,
    yum@yaml@node:new(
        {mapping, Entries},
        yum@yaml@parser@span:enclosing(First_key, Last_value),
        block_mapping
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 177).
?DOC(false).
-spec fail() -> nibble:parser(any(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
fail() ->
    nibble:fail(<<"Expected a block mapping"/utf8>>).

-file("src/yum/yaml/parser/block_mapping.gleam", 173).
?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_mapping.gleam", 120).
?DOC(false).
-spec same_line_mapping_value_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()).
same_line_mapping_value_parser(Indent, Value_parser) ->
    nibble:do(
        nibble:token(colon),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Colon_span) ->
                    nibble:do(
                        nibble:optional(Value_parser(Indent)),
                        fun(Value) -> _pipe = Value,
                            _pipe@1 = gleam@option:unwrap(
                                _pipe,
                                null_at(
                                    yum@yaml@parser@span:from_lexer(Colon_span)
                                )
                            ),
                            nibble:return(_pipe@1) end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 133).
?DOC(false).
-spec next_line_mapping_value_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()).
next_line_mapping_value_parser(Indent, Value_parser) ->
    nibble:do(
        yum@yaml@parser@indentation:same_amount_parser(Indent),
        fun(_use0) ->
            nil = _use0,
            same_line_mapping_value_parser(Indent, Value_parser)
        end
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 110).
?DOC(false).
-spec mapping_value_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()).
mapping_value_parser(Indent, Value_parser) ->
    nibble:one_of(
        [same_line_mapping_value_parser(Indent, Value_parser),
            nibble:backtrackable(
                next_line_mapping_value_parser(Indent, Value_parser)
            )]
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 102).
?DOC(false).
-spec implicit_json_mapping_key_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
implicit_json_mapping_key_parser() ->
    nibble:one_of(
        [yum@yaml@parser@flow_collection:parser(),
            yum@yaml@parser@double_quoted:parser(),
            yum@yaml@parser@single_quoted:parser()]
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 92).
?DOC(false).
-spec implicit_json_mapping_entry_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@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
implicit_json_mapping_entry_parser(Indent, Value_parser) ->
    nibble:do(
        implicit_json_mapping_key_parser(),
        fun(Key) ->
            nibble:do(
                mapping_value_parser(Indent, Value_parser),
                fun(Value) -> nibble:return({Key, Value}) end
            )
        end
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 156).
?DOC(false).
-spec pair_with(yum@yaml@node:node_(), yum@yaml@node:node_()) -> {yum@yaml@node:node_(),
    yum@yaml@node:node_()}.
pair_with(Value, Key) ->
    {Key, Value}.

-file("src/yum/yaml/parser/block_mapping.gleam", 141).
?DOC(false).
-spec mapping_key_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
mapping_key_parser() ->
    nibble:do(
        nibble:take_map(
            <<"Expected a block 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/block_mapping.gleam", 79).
?DOC(false).
-spec implicit_plain_mapping_entry_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@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
implicit_plain_mapping_entry_parser(Indent, Implicit_value_parser) ->
    nibble:do(
        mapping_key_parser(),
        fun(Key) ->
            nibble:do(
                nibble:optional(Implicit_value_parser(Indent)),
                fun(Value) -> _pipe = Value,
                    _pipe@1 = gleam@option:unwrap(
                        _pipe,
                        null_at(yum@yaml@node:span(Key))
                    ),
                    _pipe@2 = pair_with(_pipe@1, Key),
                    nibble:return(_pipe@2) end
            )
        end
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 66).
?DOC(false).
-spec implicit_mapping_entry_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@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
implicit_mapping_entry_parser(Indent, Value_parser) ->
    nibble:one_of(
        [implicit_plain_mapping_entry_parser(Indent, Value_parser),
            nibble:backtrackable(
                implicit_json_mapping_entry_parser(Indent, Value_parser)
            )]
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 57).
?DOC(false).
-spec empty_key_mapping_entry_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@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
empty_key_mapping_entry_parser(Indent, Value_parser) ->
    nibble:do(
        mapping_value_parser(Indent, Value_parser),
        fun(Value) ->
            nibble:return({null_at(yum@yaml@node:span(Value)), Value})
        end
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 44).
?DOC(false).
-spec explicit_mapping_entry_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@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
explicit_mapping_entry_parser(Indent, Value_parser) ->
    nibble:do(
        nibble:token(question_mark),
        fun(_) ->
            nibble:do(
                nibble:span(),
                fun(Marker_span) ->
                    nibble:do(
                        nibble:optional(Value_parser(Indent)),
                        fun(Key) ->
                            nibble:do(
                                nibble:optional(
                                    mapping_value_parser(Indent, Value_parser)
                                ),
                                fun(Value) ->
                                    Default = null_at(
                                        yum@yaml@parser@span:from_lexer(
                                            Marker_span
                                        )
                                    ),
                                    nibble:return(
                                        {begin
                                                _pipe = Key,
                                                gleam@option:unwrap(
                                                    _pipe,
                                                    Default
                                                )
                                            end,
                                            begin
                                                _pipe@1 = Value,
                                                gleam@option:unwrap(
                                                    _pipe@1,
                                                    Default
                                                )
                                            end}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser/block_mapping.gleam", 33).
?DOC(false).
-spec mapping_entry_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@node:node_()}, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
mapping_entry_parser(Indent, Value_parser) ->
    nibble:one_of(
        [explicit_mapping_entry_parser(Indent, Value_parser),
            empty_key_mapping_entry_parser(Indent, Value_parser),
            implicit_mapping_entry_parser(Indent, Value_parser)]
    ).

-file("src/yum/yaml/parser/block_mapping.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, Value_parser) ->
    nibble:do(
        nibble:sequence(
            mapping_entry_parser(Indent, Value_parser),
            yum@yaml@parser@indentation:block_separator_parser(Indent)
        ),
        fun(Entries) -> case Entries of
                [] ->
                    fail();

                [_ | _] ->
                    _pipe = Entries,
                    _pipe@1 = mapping_node(_pipe),
                    nibble:return(_pipe@1)
            end end
    ).