-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) ).