diff --git a/src/gen_json.erl b/src/gen_json.erl index f9d9399..d9818ee 100644 --- a/src/gen_json.erl +++ b/src/gen_json.erl @@ -28,6 +28,29 @@ -export([handle_event/2, init/1]). +-type events() :: [event()]. +-type event() :: start_object + | end_object + | start_array + | end_array + | end_json + | {key, list()} + | {string, list()} + | {integer, integer()} + | {float, float()} + | {literal, true} + | {literal, false} + | {literal, null}. + +-type opts() :: [opt()]. +-type opt() :: loose_unicode + | escape_forward_slashes + | explicit_end + | {parser, auto} | {parser, encoder} | {parser, decoder} | {parser, function()}. + +-export_type([events/0, event/0, opts/0, opt/0]). + + behaviour_info(callbacks) -> [{init, 0}, {handle_event, 2}]; behaviour_info(_) -> undefined. @@ -41,13 +64,13 @@ parser(Mod, Args) -> parser(Mod, Args, []). parser(Mod, Args, Opts) when is_atom(Mod), is_list(Opts) -> case proplists:get_value(parser, Opts, auto) of auto -> - fun(Input) when is_list(Input) -> (jsx:encoder(Mod, Args, Opts))(Input) - ; (Input) when is_binary(Input) -> (jsx:decoder(Mod, Args, Opts))(Input) + fun(Input) when is_list(Input) -> (jsx_encoder:encoder(Mod, Mod:init(Args), Opts))(Input) + ; (Input) when is_binary(Input) -> (jsx_decoder:decoder(Mod, Mod:init(Args), Opts))(Input) end ; encoder -> - fun(Input) -> (jsx:encoder(Mod, Args, Opts))(Input) end + fun(Input) -> (jsx_encoder:encoder(Mod, Mod:init(Args), Opts))(Input) end ; decoder -> - fun(Input) -> (jsx:decoder(Mod, Args, Opts))(Input) end + fun(Input) -> (jsx_decoder:decoder(Mod, Mod:init(Args), Opts))(Input) end end. diff --git a/src/jsx.erl b/src/jsx.erl index e15209d..6d37ae9 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -36,29 +36,6 @@ -endif. -%% various semi-useful types with nowhere else to hang out - --type events() :: [event()]. --type event() :: start_object - | end_object - | start_array - | end_array - | end_json - | {key, list()} - | {string, list()} - | {integer, integer()} - | {float, float()} - | {literal, true} - | {literal, false} - | {literal, null}. - --type opts() :: [opt()]. --type opt() :: loose_unicode - | escape_forward_slashes - | explicit_end - | {parser, auto} | {parser, encoder} | {parser, decoder} | {parser, function()}. - - -spec to_json(Source::any()) -> binary(). -spec to_json(Source::any(), Opts::jsx_to_json:opts()) -> binary(). @@ -115,9 +92,9 @@ jsx_decoder_test_() -> encoder_decoder_equiv_test_() -> [ {"encoder/decoder equivalency", - ?_assert((jsx:decoder(?MODULE, []))( + ?_assert((jsx_decoder:decoder(?MODULE, [], []))( <<"[\"a\", 17, 3.14, true, {\"k\":false}, []]">> - ) =:= (jsx:encoder(?MODULE, []))([<<"a">>, 17, 3.14, true, [{<<"k">>, false}], []]) + ) =:= (jsx_encoder:encoder(?MODULE, [], []))([<<"a">>, 17, 3.14, true, [{<<"k">>, false}], []]) ) } ]. diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index 6d31e74..38ee72e 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -26,10 +26,10 @@ -export([decoder/3]). --spec decoder(Mod::module(), Args::any(), Opts::jsx:opts()) -> jsx:decoder(). +-spec decoder(Handler::module(), State::any(), Opts::jsx:opts()) -> jsx:decoder(). -decoder(Mod, Args, Opts) -> - fun(JSON) -> value(JSON, {Mod, Mod:init(Args)}, [], jsx_utils:parse_opts(Opts)) end. +decoder(Handler, State, Opts) -> + fun(JSON) -> value(JSON, {Handler, State}, [], jsx_utils:parse_opts(Opts)) end. diff --git a/src/jsx_encoder.erl b/src/jsx_encoder.erl index 50db861..07c18f8 100644 --- a/src/jsx_encoder.erl +++ b/src/jsx_encoder.erl @@ -26,10 +26,10 @@ -export([encoder/3]). --spec encoder(Mod::module(), Args::any(), Opts::jsx:opts()) -> jsx:encoder(). +-spec encoder(Handler::module(), State::any(), Opts::jsx:opts()) -> jsx:encoder(). -encoder(Mod, Args, Opts) -> - fun(JSON) -> start(JSON, {Mod, Mod:init(Args)}, jsx_utils:parse_opts(Opts)) end. +encoder(Handler, State, Opts) -> + fun(JSON) -> start(JSON, {Handler, State}, jsx_utils:parse_opts(Opts)) end.