Current section
Files
Jump to
Current section
Files
src/simplejson@internal@parser.erl
-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(
<<Json/binary, "\x{00}"/utf8>>,
<<Rest/binary, "\x{00}"/utf8>>
),
{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, <<Str/binary, "\""/utf8>>);
<<"\\"/utf8, Rest@3/binary>> ->
do_parse_string(Rest@3, <<Str/binary, "\\"/utf8>>);
<<"/"/utf8, Rest@4/binary>> ->
do_parse_string(Rest@4, <<Str/binary, "/"/utf8>>);
<<"b"/utf8, Rest@5/binary>> ->
do_parse_string(Rest@5, <<Str/binary, "\x{08}"/utf8>>);
<<"f"/utf8, Rest@6/binary>> ->
do_parse_string(Rest@6, <<Str/binary, "\f"/utf8>>);
<<"n"/utf8, Rest@7/binary>> ->
do_parse_string(Rest@7, <<Str/binary, "\n"/utf8>>);
<<"r"/utf8, Rest@8/binary>> ->
do_parse_string(Rest@8, <<Str/binary, "\r"/utf8>>);
<<"t"/utf8, Rest@9/binary>> ->
do_parse_string(Rest@9, <<Str/binary, "\t"/utf8>>);
<<"u"/utf8, Rest@10/binary>> ->
gleam@result:'try'(
parse_hex(Rest@10),
fun(_use0) ->
{Rest@11, Char} = _use0,
do_parse_string(
Rest@11,
<<Str/binary, Char/binary>>
)
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, <<Str/binary, Char@1/binary>>)
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>> ->
<<Int_val/binary, ".0"/utf8>>;
_ ->
<<<<Int_val/binary, "."/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
<<N:1/binary, Rest/binary>> when N =:= <<"0"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"1"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"2"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"3"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"4"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"5"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"6"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"7"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"8"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
<<N:1/binary, Rest/binary>> when N =:= <<"9"/utf8>> ->
do_parse_int(Rest, Allow_leading_zeroes, <<Num/binary, N/binary>>);
_ ->
case Num of
<<""/utf8>> ->
{error,
{invalid_number,
<<Num/binary, ((case gleam@string:first(Json) of
{ok, Char} ->
Char;
_ ->
<<""/utf8>>
end))/binary>>,
<<Num/binary, Json/binary>>,
-1}};
<<"-"/utf8>> ->
{error,
{invalid_number,
<<Num/binary, ((case gleam@string:first(Json) of
{ok, Char} ->
Char;
_ ->
<<""/utf8>>
end))/binary>>,
<<Num/binary, Json/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,
<<Num/binary, Json/binary>>,
-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,
<<<<Num/binary, "."/utf8>>/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 = <<Num/binary,
((case Fraction@1 of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<"."/utf8,
Fraction@1/binary>>
end))/binary>>,
{invalid_number,
<<<<Invalid_num/binary,
"e"/utf8>>/binary,
Exp/binary>>,
Original_json,
-1};
_ ->
Err@1
end end
)
end,
fun(_use0@2) ->
{Json@3, Exp@1} = _use0@2,
Original = <<<<Num/binary, ((case Fraction@1 of
<<""/utf8>> ->
<<""/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.