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