Current section
Files
Jump to
Current section
Files
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, 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>>).