added a streaming mode, use option [{stream_mode, true}] to use. no tests yet
This commit is contained in:
parent
152c2ec75f
commit
fb497a20bc
7 changed files with 136 additions and 9 deletions
18
src/jsx.erl
18
src/jsx.erl
|
@ -33,7 +33,10 @@ decoder() ->
|
||||||
decoder([]).
|
decoder([]).
|
||||||
|
|
||||||
decoder(Opts) ->
|
decoder(Opts) ->
|
||||||
F = fun(end_of_stream, State) -> lists:reverse(State) ;(Event, State) -> [Event] ++ State end,
|
F = fun(end_of_stream, State) -> lists:reverse(State)
|
||||||
|
; (reset, _State) -> []
|
||||||
|
; (Event, State) -> [Event] ++ State
|
||||||
|
end,
|
||||||
decoder({F, []}, Opts).
|
decoder({F, []}, Opts).
|
||||||
|
|
||||||
decoder({F, _} = Callbacks, OptsList) when is_list(OptsList), is_function(F) ->
|
decoder({F, _} = Callbacks, OptsList) when is_list(OptsList), is_function(F) ->
|
||||||
|
@ -60,16 +63,19 @@ start(Callbacks, Opts, F) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
parse_opts(Opts) ->
|
parse_opts(Opts) ->
|
||||||
parse_opts(Opts, {false, codepoint}).
|
parse_opts(Opts, {false, codepoint, false}).
|
||||||
|
|
||||||
parse_opts([], Opts) ->
|
parse_opts([], Opts) ->
|
||||||
Opts;
|
Opts;
|
||||||
parse_opts([{comments, Value}|Rest], {_Comments, EscapedUnicode}) ->
|
parse_opts([{comments, Value}|Rest], {_Comments, EscapedUnicode, Stream}) ->
|
||||||
true = lists:member(Value, [true, false]),
|
true = lists:member(Value, [true, false]),
|
||||||
parse_opts(Rest, {Value, EscapedUnicode});
|
parse_opts(Rest, {Value, EscapedUnicode, Stream});
|
||||||
parse_opts([{escaped_unicode, Value}|Rest], {Comments, _EscapedUnicode}) ->
|
parse_opts([{escaped_unicode, Value}|Rest], {Comments, _EscapedUnicode, Stream}) ->
|
||||||
true = lists:member(Value, [ascii, codepoint, none]),
|
true = lists:member(Value, [ascii, codepoint, none]),
|
||||||
parse_opts(Rest, {Comments, Value});
|
parse_opts(Rest, {Comments, Value, Stream});
|
||||||
|
parse_opts([{stream_mode, Value}|Rest], {Comments, EscapedUnicode, _Stream}) ->
|
||||||
|
true = lists:member(Value, [true, false]),
|
||||||
|
parse_opts(Rest, {Comments, EscapedUnicode, Value});
|
||||||
parse_opts([_UnknownOpt|Rest], Opts) ->
|
parse_opts([_UnknownOpt|Rest], Opts) ->
|
||||||
parse_opts(Rest, Opts).
|
parse_opts(Rest, Opts).
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,10 @@
|
||||||
|
|
||||||
%% option flags
|
%% option flags
|
||||||
|
|
||||||
-define(comments_enabled(X), {true, _} = X).
|
-define(comments_enabled(X), {true, _, _} = X).
|
||||||
-define(escaped_unicode_to_ascii(X), {_, ascii} = X).
|
-define(escaped_unicode_to_ascii(X), {_, ascii, _} = X).
|
||||||
-define(escaped_unicode_to_codepoint(X), {_, codepoint} = X).
|
-define(escaped_unicode_to_codepoint(X), {_, codepoint, _} = X).
|
||||||
|
-define(stream_mode(X), {_, _, true} = X).
|
||||||
|
|
||||||
%% whitespace
|
%% whitespace
|
||||||
-define(space, 16#20).
|
-define(space, 16#20).
|
||||||
|
|
|
@ -93,6 +93,10 @@ maybe_done(<<?comma/?encoding, Rest/binary>>, [array|_] = Stack, Callbacks, Opts
|
||||||
value(Rest, Stack, Callbacks, Opts);
|
value(Rest, Stack, Callbacks, Opts);
|
||||||
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
||||||
|
maybe_done(Bin, [], Callbacks, ?stream_mode(Opts)) ->
|
||||||
|
{fold(end_of_stream, Callbacks), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, Callbacks), Opts)
|
||||||
|
end};
|
||||||
maybe_done(<<>>, [], Callbacks, Opts) ->
|
maybe_done(<<>>, [], Callbacks, Opts) ->
|
||||||
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
||||||
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
||||||
|
@ -407,6 +411,11 @@ zero(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitesp
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
zero(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -442,6 +451,11 @@ integer(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
integer(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -489,6 +503,11 @@ decimal(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
decimal(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -544,6 +563,11 @@ exp(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opt
|
||||||
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
|
exp(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
|
|
@ -93,6 +93,10 @@ maybe_done(<<?comma/?encoding, Rest/binary>>, [array|_] = Stack, Callbacks, Opts
|
||||||
value(Rest, Stack, Callbacks, Opts);
|
value(Rest, Stack, Callbacks, Opts);
|
||||||
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
||||||
|
maybe_done(Bin, [], Callbacks, ?stream_mode(Opts)) ->
|
||||||
|
{fold(end_of_stream, Callbacks), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, Callbacks), Opts)
|
||||||
|
end};
|
||||||
maybe_done(<<>>, [], Callbacks, Opts) ->
|
maybe_done(<<>>, [], Callbacks, Opts) ->
|
||||||
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
||||||
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
||||||
|
@ -407,6 +411,11 @@ zero(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitesp
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
zero(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -442,6 +451,11 @@ integer(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
integer(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -489,6 +503,11 @@ decimal(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
decimal(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -544,6 +563,11 @@ exp(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opt
|
||||||
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
|
exp(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
|
|
@ -93,6 +93,10 @@ maybe_done(<<?comma/?encoding, Rest/binary>>, [array|_] = Stack, Callbacks, Opts
|
||||||
value(Rest, Stack, Callbacks, Opts);
|
value(Rest, Stack, Callbacks, Opts);
|
||||||
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
||||||
|
maybe_done(Bin, [], Callbacks, ?stream_mode(Opts)) ->
|
||||||
|
{fold(end_of_stream, Callbacks), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, Callbacks), Opts)
|
||||||
|
end};
|
||||||
maybe_done(<<>>, [], Callbacks, Opts) ->
|
maybe_done(<<>>, [], Callbacks, Opts) ->
|
||||||
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
||||||
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
||||||
|
@ -407,6 +411,11 @@ zero(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitesp
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
zero(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -442,6 +451,11 @@ integer(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
integer(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -489,6 +503,11 @@ decimal(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
decimal(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -544,6 +563,11 @@ exp(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opt
|
||||||
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
|
exp(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
|
|
@ -93,6 +93,10 @@ maybe_done(<<?comma/?encoding, Rest/binary>>, [array|_] = Stack, Callbacks, Opts
|
||||||
value(Rest, Stack, Callbacks, Opts);
|
value(Rest, Stack, Callbacks, Opts);
|
||||||
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts)) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
||||||
|
maybe_done(Bin, [], Callbacks, ?stream_mode(Opts)) ->
|
||||||
|
{fold(end_of_stream, Callbacks), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, Callbacks), Opts)
|
||||||
|
end};
|
||||||
maybe_done(<<>>, [], Callbacks, Opts) ->
|
maybe_done(<<>>, [], Callbacks, Opts) ->
|
||||||
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
||||||
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
maybe_done(Bin, Stack, Callbacks, Opts) ->
|
||||||
|
@ -407,6 +411,11 @@ zero(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitesp
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
zero(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -442,6 +451,11 @@ integer(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
integer(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -489,6 +503,11 @@ decimal(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
decimal(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -544,6 +563,11 @@ exp(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opt
|
||||||
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
|
exp(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
|
|
@ -88,6 +88,10 @@ maybe_done(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enab
|
||||||
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
maybe_comment(Rest, fun(Resume) -> maybe_done(Resume, Stack, Callbacks, Opts) end);
|
||||||
maybe_done(<<>>, [], Callbacks, Opts) ->
|
maybe_done(<<>>, [], Callbacks, Opts) ->
|
||||||
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
{fold(end_of_stream, Callbacks), fun(Stream) -> maybe_done(Stream, [], Callbacks, Opts) end};
|
||||||
|
maybe_done(Bin, [], Callbacks, ?stream_mode(Opts)) ->
|
||||||
|
{fold(end_of_stream, Callbacks), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, Callbacks), Opts)
|
||||||
|
end};
|
||||||
maybe_done(<<>>, Stack, Callbacks, Opts) ->
|
maybe_done(<<>>, Stack, Callbacks, Opts) ->
|
||||||
{incomplete, fun(Stream) -> maybe_done(Stream, Stack, Callbacks, Opts) end};
|
{incomplete, fun(Stream) -> maybe_done(Stream, Stack, Callbacks, Opts) end};
|
||||||
maybe_done(_, _, _, _) -> {error, badjson}.
|
maybe_done(_, _, _, _) -> {error, badjson}.
|
||||||
|
@ -351,6 +355,11 @@ zero(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitesp
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
zero(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
zero(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
zero(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> zero(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -381,6 +390,11 @@ integer(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({integer, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
integer(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
integer(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({integer, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
integer(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({integer, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> integer(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -416,6 +430,11 @@ decimal(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whit
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
decimal(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> decimal(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
|
decimal(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
decimal(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> decimal(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
@ -456,6 +475,11 @@ exp(<<?solidus/?encoding, Rest/binary>>, Stack, Callbacks, ?comments_enabled(Opt
|
||||||
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> exp(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S/?encoding, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({float, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
|
exp(Bin, [], Callbacks, ?stream_mode(Opts), Acc) ->
|
||||||
|
CB = fold({float, lists:reverse(Acc)}, Callbacks),
|
||||||
|
{fold(end_of_stream, CB), fun(Stream) ->
|
||||||
|
start(<<Bin/binary, Stream/binary>>, [], fold(reset, CB), Opts)
|
||||||
|
end};
|
||||||
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
exp(<<>>, [], Callbacks, Opts, Acc) ->
|
||||||
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
{fold(end_of_stream, fold({float, lists:reverse(Acc)}, Callbacks)),
|
||||||
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
fun(Stream) -> exp(Stream, [], Callbacks, Opts, Acc) end};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue