Current section
Files
Jump to
Current section
Files
src/gwr@parser@value_parser.erl
-module(gwr@parser@value_parser).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([parse_unsigned_leb128_integer/1, parse_signed_leb128_integer/1, parse_uninterpreted_leb128_integer/1, parse_name/1]).
-spec parse_unsigned_leb128_integer(gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), integer()}} |
{error, binary()}.
parse_unsigned_leb128_integer(Reader) ->
gleam@result:'try'(
gwr@parser@binary_reader:get_remaining(Reader),
fun(Remaining_data) ->
gleam@result:'try'(
gleb128:fast_decode_unsigned(Remaining_data),
fun(_use0) ->
{Result, Bytes_read} = _use0,
Reader@1 = gwr@parser@binary_reader:advance(
Reader,
Bytes_read
),
{ok, {Reader@1, Result}}
end
)
end
).
-spec parse_signed_leb128_integer(gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), integer()}} |
{error, binary()}.
parse_signed_leb128_integer(Reader) ->
gleam@result:'try'(
gwr@parser@binary_reader:get_remaining(Reader),
fun(Remaining_data) ->
gleam@result:'try'(
gleb128:fast_decode_signed(Remaining_data),
fun(_use0) ->
{Result, Bytes_read} = _use0,
Reader@1 = gwr@parser@binary_reader:advance(
Reader,
Bytes_read
),
{ok, {Reader@1, Result}}
end
)
end
).
-spec parse_uninterpreted_leb128_integer(
gwr@parser@binary_reader:binary_reader()
) -> {ok, {gwr@parser@binary_reader:binary_reader(), integer()}} |
{error, binary()}.
parse_uninterpreted_leb128_integer(Reader) ->
parse_signed_leb128_integer(Reader).
-spec parse_name(gwr@parser@binary_reader:binary_reader()) -> {ok,
{gwr@parser@binary_reader:binary_reader(), binary()}} |
{error, binary()}.
parse_name(Reader) ->
gleam@result:'try'(
parse_unsigned_leb128_integer(Reader),
fun(_use0) ->
{Reader@1, Name_length} = _use0,
gleam@result:'try'(
gwr@parser@binary_reader:get_remaining(Reader@1),
fun(Remaining_data) ->
Remaining_data_length = erlang:byte_size(Remaining_data),
gleam@bool:guard(
Name_length > Remaining_data_length,
{error,
<<<<<<<<"gwr/parser/value_parser.parse_name: unexpected end of the name's data. Expected = "/utf8,
(gleam@int:to_string(Name_length))/binary>>/binary,
" bytes but got = "/utf8>>/binary,
(gleam@int:to_string(Remaining_data_length))/binary>>/binary,
" bytes"/utf8>>},
fun() ->
gleam@result:'try'(
case gwr@parser@binary_reader:read(
Reader@1,
Name_length
) of
{ok, {Reader@2, Name_data}} ->
case gleam@bit_array:to_string(
Name_data
) of
{ok, Name_string} ->
{ok, {Reader@2, Name_string}};
{error, _} ->
{error,
<<"gwr/parser/value_parser.parse_name: invalid UTF-8 name data"/utf8>>}
end;
{error, Reason} ->
{error,
<<"gwr/parser/value_parser.parse_name: couldn't parse name: "/utf8,
Reason/binary>>}
end,
fun(_use0@1) ->
{Reader@3, Result} = _use0@1,
{ok, {Reader@3, Result}}
end
)
end
)
end
)
end
).