-module(multipartkit@internal@bytes). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/multipartkit/internal/bytes.gleam"). -export([find_index/3, slice_or_empty/3, drop/2, find_blank_line/2, equals_ascii_ci/2]). -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/multipartkit/internal/bytes.gleam", 29). ?DOC(false). -spec find_index_loop(bitstring(), bitstring(), integer(), integer(), integer()) -> {ok, integer()} | {error, nil}. find_index_loop(Haystack, Needle, From, Needle_len, Haystack_len) -> case (From + Needle_len) > Haystack_len of true -> {error, nil}; false -> case gleam_stdlib:bit_array_slice(Haystack, From, Needle_len) of {ok, Window} -> case Window =:= Needle of true -> {ok, From}; false -> find_index_loop( Haystack, Needle, From + 1, Needle_len, Haystack_len ) end; {error, _} -> {error, nil} end end. -file("src/multipartkit/internal/bytes.gleam", 16). ?DOC(false). -spec find_index(bitstring(), bitstring(), integer()) -> {ok, integer()} | {error, nil}. find_index(Haystack, Needle, From) -> Needle_len = erlang:byte_size(Needle), Haystack_len = erlang:byte_size(Haystack), case Needle_len of 0 -> {ok, From}; _ -> find_index_loop(Haystack, Needle, From, Needle_len, Haystack_len) end. -file("src/multipartkit/internal/bytes.gleam", 60). ?DOC(false). -spec slice_or_empty(bitstring(), integer(), integer()) -> bitstring(). slice_or_empty(Buf, At, Length) -> gleam@result:unwrap(gleam_stdlib:bit_array_slice(Buf, At, Length), <<>>). -file("src/multipartkit/internal/bytes.gleam", 65). ?DOC(false). -spec drop(bitstring(), integer()) -> bitstring(). drop(Buf, From) -> Total = erlang:byte_size(Buf), case From >= Total of true -> <<>>; false -> slice_or_empty(Buf, From, Total - From) end. -file("src/multipartkit/internal/bytes.gleam", 118). ?DOC(false). -spec next_line_offset(bitstring(), integer(), integer()) -> {ok, integer()} | {error, nil}. next_line_offset(Buf, From, Total) -> case From >= Total of true -> {error, nil}; false -> case gleam_stdlib:bit_array_slice(Buf, From, 2) of {ok, <<"\r\n"/utf8>>} -> {ok, From + 2}; {ok, <<10, _>>} -> {ok, From + 1}; _ -> case gleam_stdlib:bit_array_slice(Buf, From, 1) of {ok, <<10>>} -> {ok, From + 1}; _ -> next_line_offset(Buf, From + 1, Total) end end end. -file("src/multipartkit/internal/bytes.gleam", 94). ?DOC(false). -spec find_blank_line_loop(bitstring(), integer(), integer()) -> {ok, {integer(), integer()}} | {error, nil}. find_blank_line_loop(Buf, At, Total) -> case At >= Total of true -> {error, nil}; false -> case gleam_stdlib:bit_array_slice(Buf, At, 2) of {ok, <<"\r\n"/utf8>>} -> {ok, {At, At + 2}}; {ok, <<10, _>>} -> {ok, {At, At + 1}}; _ -> case gleam_stdlib:bit_array_slice(Buf, At, 1) of {ok, <<10>>} -> {ok, {At, At + 1}}; _ -> case next_line_offset(Buf, At, Total) of {error, _} -> {error, nil}; {ok, Next} -> find_blank_line_loop(Buf, Next, Total) end end end end. -file("src/multipartkit/internal/bytes.gleam", 89). ?DOC(false). -spec find_blank_line(bitstring(), integer()) -> {ok, {integer(), integer()}} | {error, nil}. find_blank_line(Buf, From) -> Total = erlang:byte_size(Buf), find_blank_line_loop(Buf, From, Total). -file("src/multipartkit/internal/bytes.gleam", 148). ?DOC(false). -spec fold_ascii(integer()) -> integer(). fold_ascii(Byte) -> case (Byte >= 16#41) andalso (Byte =< 16#5A) of true -> Byte + 32; false -> Byte end. -file("src/multipartkit/internal/bytes.gleam", 136). ?DOC(false). -spec equals_ascii_ci(bitstring(), bitstring()) -> boolean(). equals_ascii_ci(A, B) -> case {A, B} of {<<>>, <<>>} -> true; {<>, <>} -> case fold_ascii(X) =:= fold_ascii(Y) of true -> equals_ascii_ci(Ax, By); false -> false end; {_, _} -> false end.