Packages

An experimental work-in-progress (WIP) WebAssembly runtime written in Gleam.

Current section

Files

Jump to
gwr src gwr@parser@byte_reader.erl
Raw

src/gwr@parser@byte_reader.erl

-module(gwr@parser@byte_reader).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gwr/parser/byte_reader.gleam").
-export([create/1, bytes_read/1, is_empty/1, can_read/1, read/2, do_read_while/3, read_while/2, advance/2, get_remaining/1, peek/1, read_remaining/1]).
-export_type([byte_reader/0]).
-opaque byte_reader() :: {byte_reader, bitstring(), integer()}.
-file("src/gwr/parser/byte_reader.gleam", 11).
-spec create(bitstring()) -> byte_reader().
create(Data) ->
{byte_reader, Data, 0}.
-file("src/gwr/parser/byte_reader.gleam", 15).
-spec bytes_read(byte_reader()) -> integer().
bytes_read(Reader) ->
erlang:element(3, Reader).
-file("src/gwr/parser/byte_reader.gleam", 19).
-spec is_empty(byte_reader()) -> boolean().
is_empty(Reader) ->
erlang:element(2, Reader) =:= <<>>.
-file("src/gwr/parser/byte_reader.gleam", 23).
-spec can_read(byte_reader()) -> boolean().
can_read(Reader) ->
erlang:element(3, Reader) < erlang:byte_size(erlang:element(2, Reader)).
-file("src/gwr/parser/byte_reader.gleam", 27).
-spec read(byte_reader(), integer()) -> {ok, {byte_reader(), bitstring()}} |
{error, gwr@parser@parsing_error:parsing_error()}.
read(Reader, Count) ->
gleam@bool:guard(
(erlang:element(3, Reader) + Count) > erlang:byte_size(
erlang:element(2, Reader)
),
begin
_pipe = gwr@parser@parsing_error:new(),
_pipe@1 = gwr@parser@parsing_error:add_message(
_pipe,
<<"No enough bytes"/utf8>>
),
gwr@parser@parsing_error:to_error(_pipe@1)
end,
fun() ->
case gleam_stdlib:bit_array_slice(
erlang:element(2, Reader),
erlang:element(3, Reader),
Count
) of
{ok, Data_read} ->
{ok,
{{byte_reader,
erlang:element(2, Reader),
erlang:element(3, Reader) + Count},
Data_read}};
_ ->
_pipe@2 = gwr@parser@parsing_error:new(),
_pipe@3 = gwr@parser@parsing_error:add_message(
_pipe@2,
<<"Unknown error slicing the ByteArray"/utf8>>
),
gwr@parser@parsing_error:to_error(_pipe@3)
end
end
).
-file("src/gwr/parser/byte_reader.gleam", 62).
-spec do_read_while(byte_reader(), fun((bitstring()) -> boolean()), bitstring()) -> {ok,
{byte_reader(), bitstring()}} |
{error, gwr@parser@parsing_error:parsing_error()}.
do_read_while(Reader, Eval, Accumulator) ->
gleam@result:'try'(
read(Reader, 1),
fun(_use0) ->
{Reader_dirty, Data} = _use0,
case Eval(Data) of
true ->
do_read_while(
Reader_dirty,
Eval,
gleam@bit_array:append(Accumulator, Data)
);
false ->
{ok, {Reader, Accumulator}}
end
end
).
-file("src/gwr/parser/byte_reader.gleam", 55).
-spec read_while(byte_reader(), fun((bitstring()) -> boolean())) -> {ok,
{byte_reader(), bitstring()}} |
{error, gwr@parser@parsing_error:parsing_error()}.
read_while(Reader, Eval) ->
do_read_while(Reader, Eval, <<>>).
-file("src/gwr/parser/byte_reader.gleam", 75).
-spec advance(byte_reader(), integer()) -> byte_reader().
advance(Reader, Count) ->
{byte_reader, erlang:element(2, Reader), erlang:element(3, Reader) + Count}.
-file("src/gwr/parser/byte_reader.gleam", 79).
-spec get_remaining(byte_reader()) -> {ok, bitstring()} |
{error, gwr@parser@parsing_error:parsing_error()}.
get_remaining(Reader) ->
case gleam_stdlib:bit_array_slice(
erlang:element(2, Reader),
erlang:element(3, Reader),
erlang:byte_size(erlang:element(2, Reader)) - erlang:element(3, Reader)
) of
{ok, Remaining_data} ->
{ok, Remaining_data};
_ ->
_pipe = gwr@parser@parsing_error:new(),
_pipe@1 = gwr@parser@parsing_error:add_message(
_pipe,
<<"Unknown error slicing the ByteArray"/utf8>>
),
gwr@parser@parsing_error:to_error(_pipe@1)
end.
-file("src/gwr/parser/byte_reader.gleam", 97).
-spec peek(byte_reader()) -> {ok, bitstring()} |
{error, gwr@parser@parsing_error:parsing_error()}.
peek(Reader) ->
case gleam_stdlib:bit_array_slice(
erlang:element(2, Reader),
erlang:element(3, Reader),
1
) of
{ok, Next} ->
{ok, Next};
_ ->
_pipe = gwr@parser@parsing_error:new(),
_pipe@1 = gwr@parser@parsing_error:add_message(
_pipe,
<<"Unknown error slicing the ByteArray"/utf8>>
),
gwr@parser@parsing_error:to_error(_pipe@1)
end.
-file("src/gwr/parser/byte_reader.gleam", 111).
-spec read_remaining(byte_reader()) -> {ok, {byte_reader(), bitstring()}} |
{error, gwr@parser@parsing_error:parsing_error()}.
read_remaining(Reader) ->
read(
Reader,
erlang:byte_size(erlang:element(2, Reader)) - erlang:element(3, Reader)
).