-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, format_as_string_small/1]). -export_type([warning_reason_code/0, dep/0, warning/0]). -type warning_reason_code() :: retired | vulnerable. -type dep() :: direct | indirect. -type warning() :: {warning, gleam@option:option(binary()), 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"/utf8>> end. -spec adv_to_warning( go_over@packages:package(), list(go_over@advisories@advisories:advisory()) ) -> list(warning()). adv_to_warning(Pkg, Advs) -> gleam@list:map( Advs, fun(Adv) -> {warning, {some, erlang:element(2, Adv)}, erlang:element(2, Pkg), erlang:element(4, Pkg), erlang:element(6, Adv), vulnerable, gleam@string:lowercase(erlang:element(4, Adv)), direct} end ). -spec retired_to_warning( go_over@packages:package(), gleam@hexpm:release_retirement() ) -> warning(). retired_to_warning(Pkg, Ret) -> {warning, none, erlang:element(2, Pkg), erlang:element(4, Pkg), go_over@retired:print_ret(Ret), retired, <<"package-retired"/utf8>>, direct}. -spec color(warning(), binary()) -> binary(). color(W, Str) -> case gleam@string:lowercase(erlang:element(7, W)) of <<"critical"/utf8>> -> go_over@util@print:format_critical(Str); <<"high"/utf8>> -> go_over@util@print:format_high(Str); <<"moderate"/utf8>> -> go_over@util@print:format_moderate(Str); <<"low"/utf8>> -> go_over@util@print:format_low(Str); _ -> go_over@util@print:format_warning(Str) end. -spec format_as_string(warning()) -> binary(). format_as_string(W) -> _pipe = [<<"ID: "/utf8, (gleam@option:unwrap(erlang:element(2, W), <<"N/A"/utf8>>))/binary>>, <<"Package: "/utf8, (erlang:element(3, W))/binary>>, <<"Version: "/utf8, (erlang:element(4, W))/binary>>, <<"WarningReason: "/utf8, (warning_reason_code_as_string(erlang:element(6, W)))/binary>>, <<"Dependency Type: "/utf8, (dep_code_as_string(erlang:element(8, W)))/binary>>, <<"Severity: "/utf8, (gleam@string:lowercase(erlang:element(7, W)))/binary>>, <<"Reason: "/utf8, (erlang:element(5, W))/binary>>], _pipe@1 = gleam@string:join(_pipe, <<"\n"/utf8>>), color(W, _pipe@1). -spec format_as_string_small(warning()) -> binary(). format_as_string_small(W) -> color( W, <<<<<<<<(erlang:element(3, W))/binary, "-"/utf8>>/binary, (erlang:element(4, W))/binary>>/binary, ": "/utf8>>/binary, (gleam@string:lowercase(erlang:element(7, W)))/binary>> ).