Current section

Files

Jump to
go_over src go_over@comparisons.erl
Raw

src/go_over@comparisons.erl

-module(go_over@comparisons).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([parse/1, get_comparator/1]).
-spec parse(binary()) -> gleamsver:sem_ver().
parse(Ver) ->
_assert_subject = begin
_pipe = gleam@string:split(Ver, <<" "/utf8>>),
gleam@list:last(_pipe)
end,
{ok, Parsed} = 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/comparisons"/utf8>>,
function => <<"parse"/utf8>>,
line => 7})
end,
_assert_subject@1 = gleamsver:parse(Parsed),
{ok, Semver} = case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"go_over/comparisons"/utf8>>,
function => <<"parse"/utf8>>,
line => 11})
end,
Semver.
-spec eq(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
eq(R) ->
fun(L) -> gleamsver:compare(L, R) =:= eq end.
-spec lt(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
lt(R) ->
fun(L) -> gleamsver:compare(L, R) =:= lt end.
-spec lte(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
lte(R) ->
fun(L) -> (eq(R))(L) orelse (lt(R))(L) end.
-spec gt(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
gt(R) ->
fun(L) -> gleamsver:compare(L, R) =:= gt end.
-spec gte(gleamsver:sem_ver()) -> fun((gleamsver:sem_ver()) -> boolean()).
gte(R) ->
fun(L) -> (eq(R))(L) orelse (gt(R))(L) end.
-spec do_get_comparator(binary()) -> fun((gleamsver:sem_ver()) -> boolean()).
do_get_comparator(Ver) ->
_assert_subject = begin
_pipe = gleam@string:split(Ver, <<" "/utf8>>),
gleam@list:first(_pipe)
end,
{ok, Op} = 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/comparisons"/utf8>>,
function => <<"do_get_comparator"/utf8>>,
line => 33})
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.
-spec all_good() -> fun((gleamsver:sem_ver()) -> boolean()).
all_good() ->
fun(_) -> false end.
-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.