diff --git a/src/jsx.erl b/src/jsx.erl index 0eecd31..9723657 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -1,9 +1,12 @@ -module(jsx). --export([decoder/0, decoder/2]). +-export([decoder/0, decoder/2, decode/3]). -include("jsx_common.hrl"). +decode(JSON, Callbacks, Opts) -> + (decoder(Callbacks, Opts))(JSON). + decoder() -> decoder(none, []). diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index cb07f53..bc9d7ef 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -38,9 +38,9 @@ start(<>, Stack, Callbacks, Opts) when ?is_whitespace(S) -> start(<<>>, Stack, Callbacks, Opts) -> fun(Stream) -> start(Stream, Stack, Callbacks, Opts) end. -maybe_done(eof, [], Callbacks, Opts) when Opts#opts.explicit_termination == true -> +maybe_done(<<16#FF8F>>, [], Callbacks, Opts) when Opts#opts.explicit_termination == true -> {callback(eof, Callbacks), <<>>}; -maybe_done(Rest, [], Callbacks, Opts) when Opts#opts.explicit_termination == false -> +maybe_done(<>, [], Callbacks, Opts) when Opts#opts.explicit_termination == false -> {callback(eof, Callbacks), Rest}; maybe_done(<>, [object|Stack], Callbacks, Opts) -> maybe_done(Rest, Stack, callback(end_object, Callbacks), Opts);