-module(simplejson@internal@parser). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([decode_int/3, parse/1]). -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 45). -spec create_error( fun((binary(), binary(), integer()) -> simplejson@jsonvalue:parse_error()), binary(), binary(), binary() ) -> simplejson@jsonvalue:parse_error(). create_error(Constructor, Json, Rest, Char) -> _assert_subject = case Char of <<""/utf8>> -> gleam@string:first(Rest); _ -> {ok, Char} end, {ok, First_char} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"simplejson/internal/parser"/utf8>>, function => <<"create_error"/utf8>>, line => 51}) end, _assert_subject@1 = gleam@string:split_once( <>, <> ), {ok, {Initial_str, _}} = case _assert_subject@1 of {ok, {_, _}} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"create_error"/utf8>>, line => 55}) end, Constructor(First_char, Rest, gleam@string:length(Initial_str)). -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 99). -spec do_trim_whitespace(binary()) -> binary(). do_trim_whitespace(Json) -> case Json of <<" "/utf8, Rest/binary>> -> do_trim_whitespace(Rest); <<"\r"/utf8, Rest/binary>> -> do_trim_whitespace(Rest); <<"\n"/utf8, Rest/binary>> -> do_trim_whitespace(Rest); <<"\t"/utf8, Rest/binary>> -> do_trim_whitespace(Rest); _ -> Json end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 230). -spec parse_hex(binary()) -> {ok, {binary(), binary()}} | {error, simplejson@jsonvalue:parse_error()}. parse_hex(Json) -> Hex = gleam@string:slice(Json, 0, 4), gleam@bool:guard( gleam@string:length(Hex) < 4, {error, unexpected_end}, fun() -> Rest = gleam@string:drop_left(Json, 4), gleam@result:'try'( begin _pipe = gleam@int:base_parse(Hex, 16), gleam@result:map_error( _pipe, fun(_) -> {invalid_hex, Hex, Json, -1} end ) end, fun(Parsed) -> case Parsed of 65534 -> {ok, {Rest, <<""/utf8>>}}; 65535 -> {ok, {Rest, <<""/utf8>>}}; _ -> gleam@result:'try'( begin _pipe@1 = gleam@string:utf_codepoint(Parsed), gleam@result:map_error( _pipe@1, fun(_) -> {invalid_hex, Hex, Json, -1} end ) end, fun(Utf8) -> {ok, {Rest, gleam_stdlib:utf_codepoint_list_to_string( [Utf8] )}} end ) end end ) end ). -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 159). -spec do_parse_string(binary(), binary()) -> {ok, {binary(), simplejson@jsonvalue:json_value()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse_string(Json, Str) -> case Json of <<"\""/utf8, Rest/binary>> -> {ok, {Rest, {json_string, Str}}}; <<"\\"/utf8, Rest@1/binary>> -> case Rest@1 of <<"\""/utf8, Rest@2/binary>> -> do_parse_string(Rest@2, <>); <<"\\"/utf8, Rest@3/binary>> -> do_parse_string(Rest@3, <>); <<"/"/utf8, Rest@4/binary>> -> do_parse_string(Rest@4, <>); <<"b"/utf8, Rest@5/binary>> -> do_parse_string(Rest@5, <>); <<"f"/utf8, Rest@6/binary>> -> do_parse_string(Rest@6, <>); <<"n"/utf8, Rest@7/binary>> -> do_parse_string(Rest@7, <>); <<"r"/utf8, Rest@8/binary>> -> do_parse_string(Rest@8, <>); <<"t"/utf8, Rest@9/binary>> -> do_parse_string(Rest@9, <>); <<"u"/utf8, Rest@10/binary>> -> gleam@result:'try'( parse_hex(Rest@10), fun(_use0) -> {Rest@11, Char} = _use0, do_parse_string( Rest@11, <> ) end ); <<""/utf8>> -> {error, unexpected_end}; _ -> _assert_subject = gleam@string:first(Rest@1), {ok, First_char} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 181}) end, {error, {invalid_escape_character, First_char, Json, -1}} end; <<"\x{00}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{01}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{02}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{03}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{04}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{05}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{06}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{07}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{08}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{09}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{0A}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{0B}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{0C}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{0D}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{0E}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{0F}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{10}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{11}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{12}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{13}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{14}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{15}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{16}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{17}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{18}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{19}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{1A}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{1B}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{1C}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{1D}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{1E}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; <<"\x{1F}"/utf8, _/binary>> -> _assert_subject@1 = gleam@string:first(Json), {ok, First_char@1} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"do_parse_string"/utf8>>, line => 218}) end, {error, {invalid_character, First_char@1, Json, -1}}; _ -> gleam@result:'try'( begin _pipe = gleam@string:pop_grapheme(Json), gleam@result:map_error(_pipe, fun(_) -> unexpected_end end) end, fun(_use0@1) -> {Char@1, Rest@12} = _use0@1, do_parse_string(Rest@12, <>) end ) end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 443). -spec exp2(integer(), integer(), integer()) -> integer(). exp2(Y, X, N) -> case gleam@int:compare(N, 0) of eq -> Y; lt -> -999; gt -> case gleam@int:is_even(N) of true -> exp2(Y, X * X, N div 2); false -> exp2(X * Y, X * X, (N - 1) div 2) end end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 439). -spec fast_exp(integer()) -> integer(). fast_exp(N) -> exp2(1, 10, N). -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 418). -spec decode_int(binary(), binary(), integer()) -> integer(). decode_int(Int_val, Fraction, Exp) -> _assert_subject = gleam@int:parse(Int_val), {ok, Int_val@1} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"simplejson/internal/parser"/utf8>>, function => <<"decode_int"/utf8>>, line => 419}) end, {Int_val@2, Exp@1} = case Fraction of <<""/utf8>> -> {Int_val@1, Exp}; Fraction@1 -> Fraction_length = gleam@string:length(Fraction@1), _assert_subject@1 = gleam@int:parse(Fraction@1), {ok, Fraction@2} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"decode_int"/utf8>>, line => 424}) end, {(Int_val@1 * fast_exp(Fraction_length)) + Fraction@2, Exp - Fraction_length} end, case Exp@1 < 0 of true -> case fast_exp(- Exp@1) of 0 -> 0; Gleam@denominator -> Int_val@2 div Gleam@denominator end; false -> Int_val@2 * fast_exp(Exp@1) end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 456). -spec decode_float(binary(), binary(), integer()) -> float(). decode_float(Int_val, Fraction, Exp) -> Float_val = case Fraction of <<""/utf8>> -> <>; _ -> <<<>/binary, Fraction/binary>> end, _assert_subject = gleam@float:parse(Float_val), {ok, Float_val@1} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"simplejson/internal/parser"/utf8>>, function => <<"decode_float"/utf8>>, line => 461}) end, case gleam@int:compare(Exp, 0) of eq -> Float_val@1; gt -> Float_val@1 * gleam@int:to_float(fast_exp(Exp)); lt -> _assert_subject@1 = gleam@int:power(10, gleam@int:to_float(Exp)), {ok, Mult} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"simplejson/internal/parser"/utf8>>, function => <<"decode_float"/utf8>>, line => 468}) end, Float_val@1 * Mult end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 485). -spec do_parse_int(binary(), boolean(), binary()) -> {ok, {binary(), binary()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse_int(Json, Allow_leading_zeroes, Num) -> case Json of <> when N =:= <<"0"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"1"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"2"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"3"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"4"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"5"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"6"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"7"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"8"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); <> when N =:= <<"9"/utf8>> -> do_parse_int(Rest, Allow_leading_zeroes, <>); _ -> case Num of <<""/utf8>> -> {error, {invalid_number, < Char; _ -> <<""/utf8>> end))/binary>>, <>, -1}}; <<"-"/utf8>> -> {error, {invalid_number, < Char; _ -> <<""/utf8>> end))/binary>>, <>, -1}}; _ -> case (Allow_leading_zeroes orelse (Num =:= <<"0"/utf8>>)) orelse (Num =:= <<"-0"/utf8>>) of true -> {ok, {Json, Num}}; false -> case gleam@string:starts_with(Num, <<"0"/utf8>>) orelse gleam@string:starts_with(Num, <<"-0"/utf8>>) of true -> {error, {invalid_number, Num, <>, -1}}; false -> {ok, {Json, Num}} end end end end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 475). -spec do_parse_exponent(binary()) -> {ok, {binary(), binary()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse_exponent(Json) -> gleam@result:'try'(case Json of <<"+"/utf8, Rest/binary>> -> do_parse_int(Rest, true, <<""/utf8>>); <<"-"/utf8, Rest@1/binary>> -> do_parse_int(Rest@1, true, <<"-"/utf8>>); _ -> do_parse_int(Json, true, <<""/utf8>>) end, fun(_use0) -> {Json@1, Exp} = _use0, {ok, {Json@1, Exp}} end). -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 280). -spec do_parse_number(binary()) -> {ok, {binary(), simplejson@jsonvalue:json_value()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse_number(Original_json) -> gleam@result:'try'(case Original_json of <<"-"/utf8, Rest/binary>> -> do_parse_int(Rest, false, <<"-"/utf8>>); Json -> do_parse_int(Json, false, <<""/utf8>>) end, fun(_use0) -> {Json@1, Num} = _use0, gleam@result:'try'( begin _pipe = case Json@1 of <<"."/utf8, Rest@1/binary>> -> do_parse_int(Rest@1, true, <<""/utf8>>); _ -> {ok, {Json@1, <<""/utf8>>}} end, gleam@result:map_error(_pipe, fun(Err) -> case Err of {invalid_number, Fraction, _, _} -> {invalid_number, <<<>/binary, Fraction/binary>>, Original_json, -1}; _ -> Err end end) end, fun(_use0@1) -> {Json@2, Fraction@1} = _use0@1, gleam@result:'try'( begin _pipe@1 = case Json@2 of <<"e"/utf8, Rest@2/binary>> -> do_parse_exponent(Rest@2); <<"E"/utf8, Rest@2/binary>> -> do_parse_exponent(Rest@2); _ -> {ok, {Json@2, <<""/utf8>>}} end, gleam@result:map_error( _pipe@1, fun(Err@1) -> case Err@1 of {invalid_number, Exp, _, _} -> Invalid_num = <> -> <<""/utf8>>; _ -> <<"."/utf8, Fraction@1/binary>> end))/binary>>, {invalid_number, <<<>/binary, Exp/binary>>, Original_json, -1}; _ -> Err@1 end end ) end, fun(_use0@2) -> {Json@3, Exp@1} = _use0@2, Original = <<<> -> <<""/utf8>>; _ -> <<"."/utf8, Fraction@1/binary>> end))/binary>>/binary, ((case Exp@1 of <<""/utf8>> -> <<""/utf8>>; _ -> <<"e"/utf8, Exp@1/binary>> end))/binary>>, gleam@result:'try'(case {Fraction@1, Exp@1} of {<<""/utf8>>, <<""/utf8>>} -> {ok, {json_number, {some, decode_int( Num, <<""/utf8>>, 0 )}, none, {some, Original}}}; {<<""/utf8>>, <<"-"/utf8, Exp@2/binary>>} -> gleam@result:'try'( begin _pipe@2 = gleam@int:parse(Exp@2), gleam@result:map_error( _pipe@2, fun(_) -> {invalid_number, Original, Original_json, -1} end ) end, fun(Exp@3) -> case gleam@string:ends_with( Num, gleam@string:repeat( <<"0"/utf8>>, Exp@3 ) ) of true -> {ok, {json_number, {some, decode_int( Num, <<""/utf8>>, - Exp@3 )}, none, {some, Original}}}; false -> {ok, {json_number, none, {some, decode_float( Num, Fraction@1, - Exp@3 )}, {some, Original}}} end end ); {<<""/utf8>>, <<"+"/utf8, Exp@4/binary>>} -> gleam@result:'try'( begin _pipe@3 = gleam@int:parse(Exp@4), gleam@result:map_error( _pipe@3, fun(_) -> {invalid_number, Original, Original_json, -1} end ) end, fun(Exp@5) -> gleam@bool:guard( Exp@5 > 1000000, {error, {invalid_number, Original, Original_json, -1}}, fun() -> {ok, {json_number, {some, decode_int( Num, <<""/utf8>>, Exp@5 )}, none, {some, Original}}} end ) end ); {<<""/utf8>>, Exp@4} -> gleam@result:'try'( begin _pipe@3 = gleam@int:parse(Exp@4), gleam@result:map_error( _pipe@3, fun(_) -> {invalid_number, Original, Original_json, -1} end ) end, fun(Exp@5) -> gleam@bool:guard( Exp@5 > 1000000, {error, {invalid_number, Original, Original_json, -1}}, fun() -> {ok, {json_number, {some, decode_int( Num, <<""/utf8>>, Exp@5 )}, none, {some, Original}}} end ) end ); {_, <<""/utf8>>} -> {ok, {json_number, none, {some, decode_float( Num, Fraction@1, 0 )}, {some, Original}}}; {_, <<"-"/utf8, Exp@6/binary>>} -> gleam@result:'try'( begin _pipe@4 = gleam@int:parse(Exp@6), gleam@result:map_error( _pipe@4, fun(_) -> {invalid_number, Original, Original_json, -1} end ) end, fun(Exp@7) -> {ok, {json_number, none, {some, decode_float( Num, Fraction@1, - Exp@7 )}, {some, Original}}} end ); {_, <<"+"/utf8, Exp@8/binary>>} -> gleam@result:'try'( begin _pipe@5 = gleam@int:parse(Exp@8), gleam@result:map_error( _pipe@5, fun(_) -> {invalid_number, Original, Original_json, -1} end ) end, fun(Exp@9) -> gleam@bool:guard( Exp@9 > 1000000, {error, {invalid_number, Original, Original_json, -1}}, fun() -> Fraction_length = gleam@string:length( Fraction@1 ), case Exp@9 >= Fraction_length of true -> {ok, {json_number, {some, decode_int( Num, Fraction@1, Exp@9 )}, none, {some, Original}}}; false -> {ok, {json_number, none, {some, decode_float( Num, Fraction@1, Exp@9 )}, {some, Original}}} end end ) end ); {_, Exp@8} -> gleam@result:'try'( begin _pipe@5 = gleam@int:parse(Exp@8), gleam@result:map_error( _pipe@5, fun(_) -> {invalid_number, Original, Original_json, -1} end ) end, fun(Exp@9) -> gleam@bool:guard( Exp@9 > 1000000, {error, {invalid_number, Original, Original_json, -1}}, fun() -> Fraction_length = gleam@string:length( Fraction@1 ), case Exp@9 >= Fraction_length of true -> {ok, {json_number, {some, decode_int( Num, Fraction@1, Exp@9 )}, none, {some, Original}}}; false -> {ok, {json_number, none, {some, decode_float( Num, Fraction@1, Exp@9 )}, {some, Original}}} end end ) end ) end, fun(Ret) -> {ok, {Json@3, Ret}} end) end ) end ) end). -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 107). -spec do_parse_object( binary(), gleam@dict:dict(binary(), simplejson@jsonvalue:json_value()), gleam@option:option({gleam@option:option(nil), gleam@option:option(binary()), gleam@option:option(simplejson@jsonvalue:json_value())}) ) -> {ok, {binary(), simplejson@jsonvalue:json_value()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse_object(Json, Obj, Last_entry) -> Trimmed_json = do_trim_whitespace(Json), case Trimmed_json of <<"}"/utf8, Rest/binary>> -> case Last_entry of none -> {ok, {Rest, {json_object, Obj}}}; {some, {none, none, none}} -> {ok, {Rest, {json_object, Obj}}}; _ -> {error, {unexpected_character, <<"}"/utf8>>, Trimmed_json, -1}} end; <<"\""/utf8, Rest@1/binary>> -> case Last_entry of none -> case do_parse_string(Rest@1, <<""/utf8>>) of {ok, {Rest@2, {json_string, Key}}} -> do_parse_object( Rest@2, Obj, {some, {{some, nil}, {some, Key}, none}} ); {error, E} -> {error, E}; {ok, _} -> {error, unknown} end; {some, {{some, nil}, none, none}} -> case do_parse_string(Rest@1, <<""/utf8>>) of {ok, {Rest@2, {json_string, Key}}} -> do_parse_object( Rest@2, Obj, {some, {{some, nil}, {some, Key}, none}} ); {error, E} -> {error, E}; {ok, _} -> {error, unknown} end; _ -> {error, {unexpected_character, <<"\""/utf8>>, Trimmed_json, -1}} end; <<":"/utf8, Rest@3/binary>> -> case Last_entry of {some, {{some, nil}, {some, Key@1}, none}} -> gleam@result:'try'( do_parse(Rest@3), fun(_use0) -> {Rest@4, Value} = _use0, do_parse_object( Rest@4, gleam@dict:insert(Obj, Key@1, Value), {some, {none, none, none}} ) end ); _ -> {error, {unexpected_character, <<":"/utf8>>, Trimmed_json, -1}} end; <<","/utf8, Rest@5/binary>> -> case Last_entry of {some, {none, none, none}} -> do_parse_object( Rest@5, Obj, {some, {{some, nil}, none, none}} ); _ -> {error, {unexpected_character, <<","/utf8>>, Trimmed_json, -1}} end; <<""/utf8>> -> {error, unexpected_end}; _ -> {error, {unexpected_character, <<""/utf8>>, Trimmed_json, -1}} end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 60). -spec do_parse(binary()) -> {ok, {binary(), simplejson@jsonvalue:json_value()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse(Json) -> Json@1 = do_trim_whitespace(Json), case Json@1 of <<"["/utf8, Rest/binary>> -> do_parse_list(Rest, [], none); <<"{"/utf8, Rest@1/binary>> -> do_parse_object(Rest@1, gleam@dict:new(), none); <<"\""/utf8, Rest@2/binary>> -> do_parse_string(Rest@2, <<""/utf8>>); <<"true"/utf8, Rest@3/binary>> -> {ok, {Rest@3, {json_bool, true}}}; <<"false"/utf8, Rest@4/binary>> -> {ok, {Rest@4, {json_bool, false}}}; <<"null"/utf8, Rest@5/binary>> -> {ok, {Rest@5, json_null}}; <<"-"/utf8, _/binary>> -> do_parse_number(Json@1); <<"0"/utf8, _/binary>> -> do_parse_number(Json@1); <<"1"/utf8, _/binary>> -> do_parse_number(Json@1); <<"2"/utf8, _/binary>> -> do_parse_number(Json@1); <<"3"/utf8, _/binary>> -> do_parse_number(Json@1); <<"4"/utf8, _/binary>> -> do_parse_number(Json@1); <<"5"/utf8, _/binary>> -> do_parse_number(Json@1); <<"6"/utf8, _/binary>> -> do_parse_number(Json@1); <<"7"/utf8, _/binary>> -> do_parse_number(Json@1); <<"8"/utf8, _/binary>> -> do_parse_number(Json@1); <<"9"/utf8, _/binary>> -> do_parse_number(Json@1); <<""/utf8>> -> {error, unexpected_end}; _ -> {error, {unexpected_character, <<""/utf8>>, Json@1, -1}} end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 16). -spec parse(binary()) -> {ok, simplejson@jsonvalue:json_value()} | {error, simplejson@jsonvalue:parse_error()}. parse(Json) -> Json@1 = do_trim_whitespace(Json), case do_parse(Json@1) of {ok, {Rest, Json_value}} -> Rest@1 = do_trim_whitespace(Rest), case Rest@1 of <<""/utf8>> -> {ok, Json_value}; _ -> {error, create_error( fun(Field@0, Field@1, Field@2) -> {unexpected_character, Field@0, Field@1, Field@2} end, Json@1, Rest@1, <<""/utf8>> )} end; {error, {unexpected_character, Char, Rest@2, -1}} -> {error, create_error( fun(Field@0, Field@1, Field@2) -> {unexpected_character, Field@0, Field@1, Field@2} end, Json@1, Rest@2, Char )}; {error, {invalid_number, Num, Rest@3, -1}} -> {error, create_error( fun(Field@0, Field@1, Field@2) -> {invalid_number, Field@0, Field@1, Field@2} end, Json@1, Rest@3, Num )}; {error, {invalid_character, Char@1, Rest@4, -1}} -> {error, create_error( fun(Field@0, Field@1, Field@2) -> {invalid_character, Field@0, Field@1, Field@2} end, Json@1, Rest@4, Char@1 )}; {error, {invalid_hex, Hex, Rest@5, -1}} -> {error, create_error( fun(Field@0, Field@1, Field@2) -> {invalid_hex, Field@0, Field@1, Field@2} end, Json@1, Rest@5, Hex )}; {error, {invalid_escape_character, Esc_char, Rest@6, -1}} -> {error, create_error( fun(Field@0, Field@1, Field@2) -> {invalid_escape_character, Field@0, Field@1, Field@2} end, Json@1, Rest@6, Esc_char )}; {error, _ = Parse_error} -> {error, Parse_error} end. -file("/Users/gareth/Development/gleam/simplejson/src/simplejson/internal/parser.gleam", 250). -spec do_parse_list( binary(), list(simplejson@jsonvalue:json_value()), gleam@option:option(simplejson@jsonvalue:json_value()) ) -> {ok, {binary(), simplejson@jsonvalue:json_value()}} | {error, simplejson@jsonvalue:parse_error()}. do_parse_list(Json, List, Last_value) -> Trimmed_json = do_trim_whitespace(Json), case Trimmed_json of <<"]"/utf8, Rest/binary>> -> {ok, {Rest, {json_array, lists:reverse(List)}}}; <<","/utf8, Rest@1/binary>> -> case Last_value of none -> {error, {invalid_character, <<","/utf8>>, Trimmed_json, -1}}; {some, _} -> gleam@result:'try'( do_parse(Rest@1), fun(_use0) -> {Rest@2, Next_item} = _use0, do_parse_list( Rest@2, [Next_item | List], {some, Next_item} ) end ) end; <<""/utf8>> -> {error, unexpected_end}; _ -> case Last_value of none -> gleam@result:'try'( do_parse(Json), fun(_use0@1) -> {Rest@3, Next_item@1} = _use0@1, do_parse_list( Rest@3, [Next_item@1 | List], {some, Next_item@1} ) end ); {some, _} -> {error, {unexpected_character, <<""/utf8>>, Trimmed_json, -1}} end end.