Current section

Files

Jump to
go_over src go_over@warning.erl
Raw

src/go_over@warning.erl

-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.