Current section
Files
Jump to
Current section
Files
src/url_join@slashes.erl
-module(url_join@slashes).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/url_join/slashes.gleam").
-export([trim_leading/1, trim_trailing/1, collapse_trailing/1]).
-file("src/url_join/slashes.gleam", 19).
-spec drop_leading_chars(binary(), binary()) -> binary().
drop_leading_chars(S, Char) ->
case gleam_stdlib:string_pop_grapheme(S) of
{ok, {G, Rest}} ->
case G =:= Char of
true ->
drop_leading_chars(Rest, Char);
false ->
S
end;
{error, _} ->
<<""/utf8>>
end.
-file("src/url_join/slashes.gleam", 3).
-spec trim_leading(binary()) -> binary().
trim_leading(S) ->
drop_leading_chars(S, <<"/"/utf8>>).
-file("src/url_join/slashes.gleam", 30).
-spec drop_trailing_chars(binary(), binary()) -> binary().
drop_trailing_chars(S, Char) ->
case gleam_stdlib:string_pop_grapheme(gleam@string:reverse(S)) of
{ok, {G, Rev_rest}} ->
case G =:= Char of
true ->
_pipe = gleam@string:reverse(Rev_rest),
drop_trailing_chars(_pipe, Char);
false ->
S
end;
{error, _} ->
<<""/utf8>>
end.
-file("src/url_join/slashes.gleam", 7).
-spec trim_trailing(binary()) -> binary().
trim_trailing(S) ->
drop_trailing_chars(S, <<"/"/utf8>>).
-file("src/url_join/slashes.gleam", 11).
-spec collapse_trailing(binary()) -> binary().
collapse_trailing(S) ->
Trimmed = drop_trailing_chars(S, <<"/"/utf8>>),
case {gleam_stdlib:string_ends_with(S, <<"/"/utf8>>),
gleam@string:is_empty(Trimmed)} of
{true, false} ->
<<Trimmed/binary, "/"/utf8>>;
{_, _} ->
Trimmed
end.