-module(kludge@internal@patch).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/kludge/internal/patch.gleam").
-export([compare_patch/2, parse_patch_name/1]).
-export_type([patch/0]).
-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).
-type patch() :: {patch,
binary(),
binary(),
binary(),
gleam@option:option(binary())}.
-file("src/kludge/internal/patch.gleam", 8).
?DOC(false).
-spec compare_patch(patch(), patch()) -> gleam@order:order().
compare_patch(Lhs, Rhs) ->
gleam@order:lazy_break_tie(
gleam@string:compare(erlang:element(3, Lhs), erlang:element(3, Rhs)),
fun() ->
gleam@order:lazy_break_tie(
gleam@string:compare(
erlang:element(4, Lhs),
erlang:element(4, Rhs)
),
fun() -> case erlang:element(5, Lhs) of
{some, Lhs@1} ->
case erlang:element(5, Rhs) of
{some, Rhs@1} ->
gleam@string:compare(Lhs@1, Rhs@1);
none ->
lt
end;
none ->
case erlang:element(5, Rhs) of
{some, _} ->
gt;
none ->
eq
end
end end
)
end
).
-file("src/kludge/internal/patch.gleam", 28).
?DOC(false).
-spec parse_patch_name(binary()) -> {ok, patch()} | {error, nil}.
parse_patch_name(Path) ->
gleam@result:'try'(
begin
_pipe = Path,
_pipe@1 = filepath:base_name(_pipe),
gleam@string:split_once(_pipe@1, <<"+"/utf8>>)
end,
fun(_use0) ->
{Name, End_dot_patch} = _use0,
gleam@bool:guard(
not gleam_stdlib:string_ends_with(
End_dot_patch,
<<".patch"/utf8>>
),
{error, nil},
fun() ->
End = gleam@string:drop_end(End_dot_patch, 6),
_pipe@2 = case gleam@string:split_once(End, <<"+"/utf8>>) of
{ok, {Version, Ordering}} ->
{patch, Path, Name, Version, {some, Ordering}};
{error, nil} ->
{patch, Path, Name, End, none}
end,
{ok, _pipe@2}
end
)
end
).