Skip to main content

src/yum@yaml@parser.erl

-module(yum@yaml@parser).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yum/yaml/parser.gleam").
-export([parse_document_stream/1, parse_stream/1, parse/1, parse_document/1]).

-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.gleam", 157).
?DOC(false).
-spec indentation_parser() -> nibble:parser(nil, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
indentation_parser() ->
    nibble:do(
        yum@yaml@parser@indentation:value_parser(),
        fun(_) -> nibble:return(nil) end
    ).

-file("src/yum/yaml/parser.gleam", 151).
?DOC(false).
-spec document_end_parser() -> nibble:parser(nil, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
document_end_parser() ->
    nibble:do(nibble:token(document_end), fun(_) -> nibble:return(nil) end).

-file("src/yum/yaml/parser.gleam", 144).
?DOC(false).
-spec stream_gap_token_parser() -> nibble:parser(nil, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
stream_gap_token_parser() ->
    nibble:one_of([document_end_parser(), indentation_parser()]).

-file("src/yum/yaml/parser.gleam", 132).
?DOC(false).
-spec stream_gap_parser() -> nibble:parser(nil, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
stream_gap_parser() ->
    nibble:do(
        nibble:many(stream_gap_token_parser()),
        fun(_) -> nibble:return(nil) end
    ).

-file("src/yum/yaml/parser.gleam", 138).
?DOC(false).
-spec indentation_gap_parser() -> nibble:parser(nil, yum@yaml@token:token(), yum@yaml@lexer@context:context()).
indentation_gap_parser() ->
    nibble:do(
        nibble:many(indentation_parser()),
        fun(_) -> nibble:return(nil) end
    ).

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

-file("src/yum/yaml/parser.gleam", 179).
?DOC(false).
-spec default_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
default_parser() ->
    yum@yaml@parser@node_property:parser(bare_node_parser()).

-file("src/yum/yaml/parser.gleam", 125).
?DOC(false).
-spec bare_document_parser() -> nibble:parser(yum@yaml@document:document(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
bare_document_parser() ->
    nibble:do(
        default_parser(),
        fun(Root) -> _pipe = yum@yaml@document:new(Root, []),
            nibble:return(_pipe) end
    ).

-file("src/yum/yaml/parser.gleam", 194).
?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.gleam", 163).
?DOC(false).
-spec directive_parser() -> nibble:parser(yum@yaml@document:directive(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
directive_parser() ->
    nibble:do(
        nibble:take_map(<<"Expected a directive"/utf8>>, fun(Tok) -> case Tok of
                    {directive, Name, Parameters} ->
                        {some, {Name, Parameters}};

                    _ ->
                        none
                end end),
        fun(Directive) ->
            nibble:do(
                nibble:span(),
                fun(Token_span) ->
                    {Name@1, Parameters@1} = Directive,
                    _pipe = {directive,
                        Name@1,
                        Parameters@1,
                        yum@yaml@parser@span:from_lexer(Token_span)},
                    nibble:return(_pipe)
                end
            )
        end
    ).

-file("src/yum/yaml/parser.gleam", 118).
?DOC(false).
-spec directive_line_parser() -> nibble:parser(yum@yaml@document:directive(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
directive_line_parser() ->
    nibble:do(
        directive_parser(),
        fun(Directive) ->
            nibble:do(
                indentation_gap_parser(),
                fun(_) -> nibble:return(Directive) end
            )
        end
    ).

-file("src/yum/yaml/parser.gleam", 103).
?DOC(false).
-spec explicit_document_parser() -> nibble:parser(yum@yaml@document:document(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
explicit_document_parser() ->
    nibble:do(
        nibble:many(directive_line_parser()),
        fun(Directives) ->
            nibble:do(
                indentation_gap_parser(),
                fun(_) ->
                    nibble:do(
                        nibble:token(document_start),
                        fun(_) ->
                            nibble:do(
                                nibble:span(),
                                fun(Document_start_span) ->
                                    nibble:do(
                                        indentation_gap_parser(),
                                        fun(_) ->
                                            nibble:do(
                                                begin
                                                    _pipe = default_parser(),
                                                    nibble:'or'(
                                                        _pipe,
                                                        null_at(
                                                            yum@yaml@parser@span:from_lexer(
                                                                Document_start_span
                                                            )
                                                        )
                                                    )
                                                end,
                                                fun(Root) ->
                                                    _pipe@1 = yum@yaml@document:new(
                                                        Root,
                                                        Directives
                                                    ),
                                                    nibble:return(_pipe@1)
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser.gleam", 96).
?DOC(false).
-spec document_parser() -> nibble:parser(yum@yaml@document:document(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
document_parser() ->
    nibble:one_of([explicit_document_parser(), bare_document_parser()]).

-file("src/yum/yaml/parser.gleam", 87).
?DOC(false).
-spec suffixed_stream_document_parser() -> nibble:parser(yum@yaml@document:document(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
suffixed_stream_document_parser() ->
    nibble:do(
        document_end_parser(),
        fun(_) ->
            nibble:do(
                indentation_gap_parser(),
                fun(_) ->
                    nibble:do(
                        document_parser(),
                        fun(Document) ->
                            nibble:do(
                                indentation_gap_parser(),
                                fun(_) -> nibble:return(Document) end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/yum/yaml/parser.gleam", 80).
?DOC(false).
-spec explicit_stream_document_parser() -> nibble:parser(yum@yaml@document:document(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
explicit_stream_document_parser() ->
    nibble:do(
        explicit_document_parser(),
        fun(Document) ->
            nibble:do(
                indentation_gap_parser(),
                fun(_) -> nibble:return(Document) end
            )
        end
    ).

-file("src/yum/yaml/parser.gleam", 73).
?DOC(false).
-spec stream_document_parser() -> nibble:parser(yum@yaml@document:document(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
stream_document_parser() ->
    nibble:one_of(
        [explicit_stream_document_parser(),
            nibble:backtrackable(suffixed_stream_document_parser())]
    ).

-file("src/yum/yaml/parser.gleam", 59).
?DOC(false).
-spec stream_parser() -> nibble:parser(list(yum@yaml@document:document()), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
stream_parser() ->
    nibble:do(
        stream_gap_parser(),
        fun(_) ->
            nibble:do(
                nibble:optional(document_parser()),
                fun(First) ->
                    nibble:do(
                        indentation_gap_parser(),
                        fun(_) ->
                            nibble:do(
                                nibble:many(stream_document_parser()),
                                fun(Rest) ->
                                    nibble:do(
                                        stream_gap_parser(),
                                        fun(_) ->
                                            nibble:do(
                                                nibble:eof(),
                                                fun(_) -> case First of
                                                        {some, Document} ->
                                                            nibble:return(
                                                                [Document |
                                                                    Rest]
                                                            );

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

-file("src/yum/yaml/parser.gleam", 51).
?DOC(false).
-spec parse_document_stream(list(nibble@lexer:token(yum@yaml@token:token()))) -> {ok,
        list(yum@yaml@document:document())} |
    {error, yum@yaml@error:yaml_error()}.
parse_document_stream(Tokens) ->
    _pipe = Tokens,
    _pipe@1 = nibble:run(_pipe, stream_parser()),
    gleam@result:map_error(_pipe@1, fun yum@yaml@error:from_parse_errors/1).

-file("src/yum/yaml/parser.gleam", 43).
?DOC(false).
-spec parse_stream(list(nibble@lexer:token(yum@yaml@token:token()))) -> {ok,
        list(yum@yaml@node:node_())} |
    {error, yum@yaml@error:yaml_error()}.
parse_stream(Tokens) ->
    _pipe = Tokens,
    _pipe@1 = parse_document_stream(_pipe),
    gleam@result:map(
        _pipe@1,
        fun(_capture) ->
            gleam@list:map(_capture, fun yum@yaml@document:root/1)
        end
    ).

-file("src/yum/yaml/parser.gleam", 21).
?DOC(false).
-spec parse(list(nibble@lexer:token(yum@yaml@token:token()))) -> {ok,
        yum@yaml@node:node_()} |
    {error, yum@yaml@error:yaml_error()}.
parse(Tokens) ->
    gleam@result:'try'(parse_stream(Tokens), fun(Documents) -> case Documents of
                [Document] ->
                    {ok, Document};

                [_, _ | _] ->
                    {error, yum@yaml@error:multiple_documents()};

                [] ->
                    {error, yum@yaml@error:unexpected_end_of_input()}
            end end).

-file("src/yum/yaml/parser.gleam", 31).
?DOC(false).
-spec parse_document(list(nibble@lexer:token(yum@yaml@token:token()))) -> {ok,
        yum@yaml@document:document()} |
    {error, yum@yaml@error:yaml_error()}.
parse_document(Tokens) ->
    gleam@result:'try'(
        parse_document_stream(Tokens),
        fun(Documents) -> case Documents of
                [Document] ->
                    {ok, Document};

                [_, _ | _] ->
                    {error, yum@yaml@error:multiple_documents()};

                [] ->
                    {error, yum@yaml@error:unexpected_end_of_input()}
            end end
    ).