Skip to main content

src/yum@yaml@parser@node_property.erl

-module(yum@yaml@parser@node_property).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/yum/yaml/parser/node_property.gleam").
-export([parser/1]).
-export_type([property/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 property() :: {anchor, binary()} | {tag, binary()}.

-file("src/yum/yaml/parser/node_property.gleam", 53).
?DOC(false).
-spec apply_property(yum@yaml@node:node_(), property()) -> yum@yaml@node:node_().
apply_property(Value, Property) ->
    case Property of
        {anchor, Anchor} ->
            yum@yaml@node:with_anchor(Value, Anchor);

        {tag, Tag} ->
            yum@yaml@node:with_tag(Value, Tag)
    end.

-file("src/yum/yaml/parser/node_property.gleam", 43).
?DOC(false).
-spec apply_properties(list(property()), yum@yaml@node:node_()) -> yum@yaml@node:node_().
apply_properties(Properties, Value) ->
    case Properties of
        [] ->
            Value;

        [Property | Rest] ->
            Value@1 = apply_property(Value, Property),
            apply_properties(Rest, Value@1)
    end.

-file("src/yum/yaml/parser/node_property.gleam", 33).
?DOC(false).
-spec property_token_parser() -> nibble:parser(property(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
property_token_parser() ->
    nibble:take_map(<<"Expected a node property"/utf8>>, fun(Tok) -> case Tok of
                {anchor, Value} ->
                    {some, {anchor, Value}};

                {tag, Value@1} ->
                    {some, {tag, Value@1}};

                _ ->
                    none
            end end).

-file("src/yum/yaml/parser/node_property.gleam", 17).
?DOC(false).
-spec property_parser(
    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()).
property_parser(Node_parser) ->
    nibble:do(
        nibble:many(property_token_parser()),
        fun(Properties) ->
            nibble:do(Node_parser, fun(Value) -> _pipe = Properties,
                    _pipe@1 = apply_properties(_pipe, Value),
                    nibble:return(_pipe@1) end)
        end
    ).

-file("src/yum/yaml/parser/node_property.gleam", 60).
?DOC(false).
-spec alias_parser() -> nibble:parser(yum@yaml@node:node_(), yum@yaml@token:token(), yum@yaml@lexer@context:context()).
alias_parser() ->
    nibble:do(
        nibble:take_map(<<"Expected an alias"/utf8>>, fun(Tok) -> case Tok of
                    {alias, Value} ->
                        {some, Value};

                    _ ->
                        none
                end end),
        fun(Alias) ->
            nibble:do(
                nibble:span(),
                fun(Token_span) ->
                    _pipe = yum@yaml@node:new(
                        null,
                        yum@yaml@parser@span:from_lexer(Token_span),
                        synthetic
                    ),
                    _pipe@1 = yum@yaml@node:with_alias(_pipe, Alias),
                    nibble:return(_pipe@1)
                end
            )
        end
    ).

-file("src/yum/yaml/parser/node_property.gleam", 8).
?DOC(false).
-spec parser(
    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(Node_parser) ->
    nibble:one_of([alias_parser(), property_parser(Node_parser)]).