fully integrate gen_json.erl

This commit is contained in:
alisdair sullivan 2012-01-31 20:56:08 -08:00
parent 9aaa23735a
commit e15a0e9a81
4 changed files with 35 additions and 35 deletions

View file

@ -28,6 +28,29 @@
-export([handle_event/2, init/1]). -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(callbacks) -> [{init, 0}, {handle_event, 2}];
behaviour_info(_) -> undefined. behaviour_info(_) -> undefined.
@ -41,13 +64,13 @@ parser(Mod, Args) -> parser(Mod, Args, []).
parser(Mod, Args, Opts) when is_atom(Mod), is_list(Opts) -> parser(Mod, Args, Opts) when is_atom(Mod), is_list(Opts) ->
case proplists:get_value(parser, Opts, auto) of case proplists:get_value(parser, Opts, auto) of
auto -> auto ->
fun(Input) when is_list(Input) -> (jsx:encoder(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(Mod, Args, Opts))(Input) ; (Input) when is_binary(Input) -> (jsx_decoder:decoder(Mod, Mod:init(Args), Opts))(Input)
end end
; encoder -> ; encoder ->
fun(Input) -> (jsx:encoder(Mod, Args, Opts))(Input) end fun(Input) -> (jsx_encoder:encoder(Mod, Mod:init(Args), Opts))(Input) end
; decoder -> ; decoder ->
fun(Input) -> (jsx:decoder(Mod, Args, Opts))(Input) end fun(Input) -> (jsx_decoder:decoder(Mod, Mod:init(Args), Opts))(Input) end
end. end.

View file

@ -36,29 +36,6 @@
-endif. -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()) -> binary().
-spec to_json(Source::any(), Opts::jsx_to_json:opts()) -> 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_equiv_test_() ->
[ [
{"encoder/decoder equivalency", {"encoder/decoder equivalency",
?_assert((jsx:decoder(?MODULE, []))( ?_assert((jsx_decoder:decoder(?MODULE, [], []))(
<<"[\"a\", 17, 3.14, true, {\"k\":false}, []]">> <<"[\"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}], []])
) )
} }
]. ].

View file

@ -26,10 +26,10 @@
-export([decoder/3]). -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) -> decoder(Handler, State, Opts) ->
fun(JSON) -> value(JSON, {Mod, Mod:init(Args)}, [], jsx_utils:parse_opts(Opts)) end. fun(JSON) -> value(JSON, {Handler, State}, [], jsx_utils:parse_opts(Opts)) end.

View file

@ -26,10 +26,10 @@
-export([encoder/3]). -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) -> encoder(Handler, State, Opts) ->
fun(JSON) -> start(JSON, {Mod, Mod:init(Args)}, jsx_utils:parse_opts(Opts)) end. fun(JSON) -> start(JSON, {Handler, State}, jsx_utils:parse_opts(Opts)) end.