Skip to main content

src/kludge@internal@manifest.erl

-module(kludge@internal@manifest).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/kludge/internal/manifest.gleam").
-export([manifest_package_decoder/0, manifest_decoder/0]).
-export_type([manifest/0, manifest_package/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 manifest() :: {manifest, list(manifest_package())}.

-type manifest_package() :: {hex_package,
        binary(),
        binary(),
        list(binary()),
        list(binary()),
        binary(),
        binary()} |
    {git_package,
        binary(),
        binary(),
        list(binary()),
        list(binary()),
        binary(),
        binary()} |
    {path_package, binary(), binary(), list(binary()), list(binary()), binary()}.

-file("src/kludge/internal/manifest.gleam", 41).
?DOC(false).
-spec manifest_package_decoder() -> gleam@dynamic@decode:decoder(manifest_package()).
manifest_package_decoder() ->
    gleam@dynamic@decode:field(
        <<"source"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Source) ->
            gleam@dynamic@decode:field(
                <<"name"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Name) ->
                    gleam@dynamic@decode:field(
                        <<"version"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Version) ->
                            gleam@dynamic@decode:field(
                                <<"build_tools"/utf8>>,
                                gleam@dynamic@decode:list(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_string/1}
                                ),
                                fun(Build_tools) ->
                                    gleam@dynamic@decode:field(
                                        <<"requirements"/utf8>>,
                                        gleam@dynamic@decode:list(
                                            {decoder,
                                                fun gleam@dynamic@decode:decode_string/1}
                                        ),
                                        fun(Requirements) -> case Source of
                                                <<"git"/utf8>> ->
                                                    gleam@dynamic@decode:field(
                                                        <<"repo"/utf8>>,
                                                        {decoder,
                                                            fun gleam@dynamic@decode:decode_string/1},
                                                        fun(Repo) ->
                                                            gleam@dynamic@decode:field(
                                                                <<"commit"/utf8>>,
                                                                {decoder,
                                                                    fun gleam@dynamic@decode:decode_string/1},
                                                                fun(Commit) ->
                                                                    gleam@dynamic@decode:success(
                                                                        {git_package,
                                                                            Name,
                                                                            Version,
                                                                            Build_tools,
                                                                            Requirements,
                                                                            Repo,
                                                                            Commit}
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    );

                                                <<"hex"/utf8>> ->
                                                    gleam@dynamic@decode:field(
                                                        <<"otp_app"/utf8>>,
                                                        {decoder,
                                                            fun gleam@dynamic@decode:decode_string/1},
                                                        fun(Otp_app) ->
                                                            gleam@dynamic@decode:field(
                                                                <<"outer_checksum"/utf8>>,
                                                                {decoder,
                                                                    fun gleam@dynamic@decode:decode_string/1},
                                                                fun(
                                                                    Outer_checksum
                                                                ) ->
                                                                    gleam@dynamic@decode:success(
                                                                        {hex_package,
                                                                            Name,
                                                                            Version,
                                                                            Build_tools,
                                                                            Requirements,
                                                                            Otp_app,
                                                                            Outer_checksum}
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    );

                                                <<"local"/utf8>> ->
                                                    gleam@dynamic@decode:field(
                                                        <<"path"/utf8>>,
                                                        {decoder,
                                                            fun gleam@dynamic@decode:decode_string/1},
                                                        fun(Path) ->
                                                            gleam@dynamic@decode:success(
                                                                {path_package,
                                                                    Name,
                                                                    Version,
                                                                    Build_tools,
                                                                    Requirements,
                                                                    Path}
                                                            )
                                                        end
                                                    );

                                                _ ->
                                                    gleam@dynamic@decode:failure(
                                                        {path_package,
                                                            Name,
                                                            Version,
                                                            Build_tools,
                                                            Requirements,
                                                            <<""/utf8>>},
                                                        <<"ManifestPackage"/utf8>>
                                                    )
                                            end end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/kludge/internal/manifest.gleam", 7).
?DOC(false).
-spec manifest_decoder() -> gleam@dynamic@decode:decoder(manifest()).
manifest_decoder() ->
    gleam@dynamic@decode:field(
        <<"packages"/utf8>>,
        gleam@dynamic@decode:list(manifest_package_decoder()),
        fun(Packages) -> gleam@dynamic@decode:success({manifest, Packages}) end
    ).