-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, format_as_string/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(), binary(), 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 adv_to_warning( go_over@packages:package(), list(go_over@advisories:advisory()) ) -> 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(A) -> erlang:element(6, A) end), gleam@string:join(_pipe@1, <<"\n"/utf8>>) end, vulnerable, begin _pipe@2 = Adv, _pipe@3 = gleam@list:map( _pipe@2, fun(A@1) -> erlang:element(4, A@1) end ), gleam@string:join(_pipe@3, <<"\n"/utf8>>) end, 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, <<"package-retired"/utf8>>, direct}. -spec format_as_string(warning()) -> binary(). format_as_string(W) -> Str = begin _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(7, W)))/binary>>, <<"Severity: "/utf8, (gleam@string:lowercase(erlang:element(6, W)))/binary>>, <<"Reason: "/utf8, (erlang:element(4, W))/binary>>], gleam@string:join(_pipe, <<"\n"/utf8>>) end, case gleam@string:lowercase(erlang:element(6, W)) of <<"critical"/utf8>> -> go_over@print:format_critical(Str); <<"high"/utf8>> -> go_over@print:format_high(Str); <<"moderate"/utf8>> -> go_over@print:format_moderate(Str); <<"low"/utf8>> -> go_over@print:format_low(Str); _ -> go_over@print:format_warning(Str) end.