fully integrate gen_json.erl
This commit is contained in:
parent
9aaa23735a
commit
e15a0e9a81
4 changed files with 35 additions and 35 deletions
|
@ -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.
|
||||
|
||||
|
||||
|
|
27
src/jsx.erl
27
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}], []])
|
||||
)
|
||||
}
|
||||
].
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue