Current section
Files
Jump to
Current section
Files
src/go_over@advisories@comparisons.erl
-module(go_over@advisories@comparisons).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/go_over/advisories/comparisons.gleam").
-export([parse/1, get_comparator/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/go_over/advisories/comparisons.gleam", 10).
?DOC(false).
-spec parse(binary()) -> gleamsver:sem_ver().
parse(Ver) ->
Parsed = begin
_pipe = gleam@string:split(Ver, <<" "/utf8>>),
_pipe@1 = gleam@list:last(_pipe),
gxyz@cli:hard_fail_with_msg(
_pipe@1,
<<"could not parse "/utf8, Ver/binary>>
)
end,
_pipe@2 = gleamsver:parse(Parsed),
gxyz@cli:hard_fail_with_msg(
_pipe@2,
<<"could not parse "/utf8, Parsed/binary>>
).
-file("src/go_over/advisories/comparisons.gleam", 55).
?DOC(false).
-spec eq(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
eq(R) ->
fun(L) -> gleamsver:are_equal(R, L) end.
-file("src/go_over/advisories/comparisons.gleam", 59).
?DOC(false).
-spec lt(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
lt(R) ->
fun(L) -> gleamsver:compare(L, R) =:= lt end.
-file("src/go_over/advisories/comparisons.gleam", 63).
?DOC(false).
-spec lte(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
lte(R) ->
fun(L) -> (eq(R))(L) orelse (lt(R))(L) end.
-file("src/go_over/advisories/comparisons.gleam", 67).
?DOC(false).
-spec gt(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
gt(R) ->
fun(L) -> gleamsver:compare(L, R) =:= gt end.
-file("src/go_over/advisories/comparisons.gleam", 71).
?DOC(false).
-spec gte(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
gte(R) ->
fun(L) -> (eq(R))(L) orelse (gt(R))(L) end.
-file("src/go_over/advisories/comparisons.gleam", 37).
?DOC(false).
-spec do_get_comparator(binary()) -> fun((gleamsver:sem_ver()) -> boolean()).
do_get_comparator(Ver) ->
Op = begin
_pipe = gleam@string:split(Ver, <<" "/utf8>>),
_pipe@1 = gleam@list:first(_pipe),
gxyz@cli:hard_fail_with_msg(
_pipe@1,
<<"could not parse "/utf8, Ver/binary>>
)
end,
Semver = parse(Ver),
case Op of
<<"<"/utf8>> ->
lt(Semver);
<<"<="/utf8>> ->
lte(Semver);
<<">"/utf8>> ->
gt(Semver);
<<">="/utf8>> ->
gte(Semver);
<<"=="/utf8>> ->
eq(Semver);
<<"="/utf8>> ->
eq(Semver);
_ ->
eq(Semver)
end.
-file("src/go_over/advisories/comparisons.gleam", 75).
?DOC(false).
-spec all_good() -> fun((gleamsver:sem_ver()) -> boolean()).
all_good() ->
fun(_) -> false end.
-file("src/go_over/advisories/comparisons.gleam", 20).
?DOC(false).
-spec get_comparator(binary()) -> fun((gleamsver:sem_ver()) -> boolean()).
get_comparator(Ver) ->
Cleaned = begin
_pipe = Ver,
_pipe@1 = gleam@string:split(_pipe, <<","/utf8>>),
gleam@list:map(_pipe@1, fun gleam@string:trim/1)
end,
case Cleaned of
[] ->
all_good();
[V] ->
do_get_comparator(V);
[First | Tail] ->
gleam@list:fold(
Tail,
do_get_comparator(First),
fun(Acc, V@1) ->
fun(Semver) ->
Acc(Semver) andalso (do_get_comparator(V@1))(Semver)
end
end
)
end.