-module(go_over@warning). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([adv_to_warning/2, retired_to_warning/2, print/1]). -export_type([warning_reason_code/0, dep/0, warning/0]). -type warning_reason_code() :: retired | vulnerable. -type dep() :: direct | indirect. -type warning() :: {warning, binary(), binary(), binary(), warning_reason_code(), dep()}. -spec warning_reason_code_as_string(warning_reason_code()) -> binary(). warning_reason_code_as_string(W) -> case W of retired -> <<"Retired"/utf8>>; vulnerable -> <<"Vulnerable"/utf8>> end. -spec dep_code_as_string(dep()) -> binary(). dep_code_as_string(D) -> case D of direct -> <<"Direct"/utf8>>; indirect -> <<"Indirect dependency"/utf8>> end. -spec print_adv(go_over@advisories:adv()) -> binary(). print_adv(Adv) -> _assert_subject = simplifile:read(erlang:element(4, Adv)), {ok, Contents} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail, module => <<"go_over/warning"/utf8>>, function => <<"print_adv"/utf8>>, line => 44}) end, <<"\n"/utf8, Contents/binary>>. -spec adv_to_warning(go_over@packages:package(), list(go_over@advisories:adv())) -> warning(). adv_to_warning(Pkg, Adv) -> {warning, erlang:element(2, Pkg), erlang:element(4, Pkg), begin _pipe = Adv, _pipe@1 = gleam@list:map(_pipe, fun print_adv/1), gleam@string:join(_pipe@1, <<"\n"/utf8>>) end, vulnerable, direct}. -spec retired_to_warning( go_over@packages:package(), gleam@hexpm:release_retirement() ) -> warning(). retired_to_warning(Pkg, Ret) -> {warning, erlang:element(2, Pkg), erlang:element(4, Pkg), go_over@retired:print_ret(Ret), retired, direct}. -spec print(warning()) -> binary(). print(W) -> _pipe = [<<"Package: "/utf8, (erlang:element(2, W))/binary>>, <<"Version: "/utf8, (erlang:element(3, W))/binary>>, <<"WarningReason: "/utf8, (warning_reason_code_as_string(erlang:element(5, W)))/binary>>, <<"Dependency Type: "/utf8, (dep_code_as_string(erlang:element(6, W)))/binary>>, <<"Reason: "/utf8, (erlang:element(4, W))/binary>>], gleam@string:join(_pipe, <<"\n"/utf8>>).