Replace 'jsx' with 'jiffy' to optimize json encode/decode

This commit is contained in:
Feng Lee 2020-01-19 11:35:56 +08:00
parent e17241884c
commit b3e2cc5a18
2 changed files with 25 additions and 18 deletions

View File

@ -1,8 +1,8 @@
{minimum_otp_vsn, "21.0"}.
{deps,
[{jsx, "2.10.0"},
{gproc, "0.8.0"},
[{gproc, "0.8.0"},
{jiffy, "1.0.1"},
{cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.7.1"}}},
{esockd, {git, "https://github.com/emqx/esockd", {tag, "5.6.0"}}},
{ekka, {git, "https://github.com/emqx/ekka", {tag, "0.7.1"}}},

View File

@ -40,22 +40,30 @@
, decode/2
]}).
-spec(encode(jsx:json_term()) -> jsx:json_text()).
-type(encode_options() :: jiffy:encode_options()).
-type(decode_options() :: jiffy:decode_options()).
-type(json_text() :: iolist() | binary()).
-type(json_term() :: jiffy:jiffy_decode_result()).
-export_type([json_text/0, json_term/0]).
-export_type([decode_options/0, encode_options/0]).
-spec(encode(json_term()) -> json_text()).
encode(Term) ->
jsx:encode(Term).
-spec(encode(jsx:json_term(), jsx_to_json:config())
-> jsx:json_text()).
-spec(encode(json_term(), encode_options()) -> json_text()).
encode(Term, Opts) ->
jsx:encode(Term, Opts).
-spec(safe_encode(jsx:json_term())
-> {ok, jsx:json_text()} | {error, Reason :: term()}).
-spec(safe_encode(json_term())
-> {ok, json_text()} | {error, Reason :: term()}).
safe_encode(Term) ->
safe_encode(Term, []).
-spec(safe_encode(jsx:json_term(), jsx_to_json:config())
-> {ok, jsx:json_text()} | {error, Reason :: term()}).
-spec(safe_encode(json_term(), encode_options())
-> {ok, json_text()} | {error, Reason :: term()}).
safe_encode(Term, Opts) ->
try encode(Term, Opts) of
Json -> {ok, Json}
@ -64,22 +72,21 @@ safe_encode(Term, Opts) ->
{error, Reason}
end.
-spec(decode(jsx:json_text()) -> jsx:json_term()).
-spec(decode(json_text()) -> json_term()).
decode(Json) ->
jsx:decode(Json).
case jsx:decode(Json) of {Term} -> Term; Other -> Other end.
-spec(decode(jsx:json_text(), jsx_to_json:config())
-> jsx:json_term()).
-spec(decode(json_text(), decode_options()) -> json_term()).
decode(Json, Opts) ->
jsx:decode(Json, Opts).
case jsx:decode(Json, Opts) of {Term} -> Term; Other -> Other end.
-spec(safe_decode(jsx:json_text())
-> {ok, jsx:json_term()} | {error, Reason :: term()}).
-spec(safe_decode(json_text())
-> {ok, json_term()} | {error, Reason :: term()}).
safe_decode(Json) ->
safe_decode(Json, []).
-spec(safe_decode(jsx:json_text(), jsx_to_json:config())
-> {ok, jsx:json_term()} | {error, Reason :: term()}).
-spec(safe_decode(json_text(), decode_options())
-> {ok, json_term()} | {error, Reason :: term()}).
safe_decode(Json, Opts) ->
try decode(Json, Opts) of
Term -> {ok, Term}