diff --git a/.gitignore b/.gitignore index 4a8eee6..4c14464 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,3 @@ ebin *.plt erl_crash.dump .DS_Store -doc -.rebar diff --git a/rebar.config b/rebar.config index 0dcef82..38858b5 100644 --- a/rebar.config +++ b/rebar.config @@ -1,5 +1,6 @@ {erl_opts, [ % uncomment to always decode to maps % {d, maps_always}, -]}. -{edoc_opts, [{preprocess, true}]}. \ No newline at end of file + {platform_define, "R14|R15", 'no_binary_to_whatever'}, + {platform_define, "^((?!R1[456]).)*$", 'maps_support'} +]}. \ No newline at end of file diff --git a/rebar.config.script b/rebar.config.script deleted file mode 100644 index 4510155..0000000 --- a/rebar.config.script +++ /dev/null @@ -1,11 +0,0 @@ -Def0 = case erlang:is_builtin(erlang, binary_to_integer, 1) andalso - erlang:is_builtin(erlang, binary_to_float, 1) of - true -> []; - false -> [{d, no_binary_to_whatever}] - end, -Defs = case erlang:is_builtin(erlang, is_map, 1) of - true -> [{d, maps_support}|Def0]; - false -> Def0 - end, -lists:keystore(erl_opts, 1, CONFIG, - {erl_opts, proplists:get_value(erl_opts, CONFIG, []) ++ Defs}). diff --git a/src/jsx.erl b/src/jsx.erl index 0b55b2e..0401ce5 100644 --- a/src/jsx.erl +++ b/src/jsx.erl @@ -67,29 +67,23 @@ -type config() :: jsx_config:config(). -spec encode(Source::json_term()) -> json_text(). - -encode(Source) -> encode(Source, []). - -spec encode(Source::json_term(), Config::jsx_to_json:config()) -> json_text() | {incomplete, encoder()}. +encode(Source) -> encode(Source, []). encode(Source, Config) -> jsx_to_json:to_json(Source, Config). -spec decode(Source::json_text()) -> json_term(). +-spec decode(Source::json_text(), Config::jsx_to_term:config()) -> json_term() | {incomplete, decoder()}. decode(Source) -> decode(Source, []). - --spec decode(Source::json_text(), Config::jsx_to_term:config()) -> json_term() | {incomplete, decoder()}. - decode(Source, Config) -> jsx_to_term:to_term(Source, Config). -spec format(Source::json_text()) -> json_text(). - -format(Source) -> format(Source, []). - -spec format(Source::json_text(), Config::jsx_to_json:config()) -> json_text() | {incomplete, decoder()}. +format(Source) -> format(Source, []). format(Source, Config) -> jsx_to_json:format(Source, Config). @@ -103,30 +97,24 @@ minify(Source) -> format(Source, []). prettify(Source) -> format(Source, [space, {indent, 2}]). --spec is_json(Source::any()) -> boolean(). +-spec is_json(Source::any()) -> true | false. +-spec is_json(Source::any(), Config::jsx_verify:config()) -> true | false | {incomplete, decoder()}. is_json(Source) -> is_json(Source, []). - --spec is_json(Source::any(), Config::jsx_verify:config()) -> boolean() | {incomplete, decoder()}. - is_json(Source, Config) -> jsx_verify:is_json(Source, Config). --spec is_term(Source::any()) -> boolean(). +-spec is_term(Source::any()) -> true | false. +-spec is_term(Source::any(), Config::jsx_verify:config()) -> true | false | {incomplete, encoder()}. is_term(Source) -> is_term(Source, []). - --spec is_term(Source::any(), Config::jsx_verify:config()) -> boolean() | {incomplete, encoder()}. - is_term(Source, Config) -> jsx_verify:is_term(Source, Config). -spec consult(File::file:name_all()) -> list(json_term()). - -consult(File) -> consult(File, []). - -spec consult(File::file:name_all(), Config::jsx_to_term:config()) -> list(json_term()). +consult(File) -> consult(File, []). consult(File, Config) -> jsx_consult:consult(File, Config). @@ -182,7 +170,7 @@ resume(Term, {parser, State, Handler, Stack}, Config) -> jsx_parser:resume(Term, State, Handler, Stack, jsx_config:parse_config(Config)). --spec maps_support() -> boolean(). +-spec maps_support() -> true | false. -ifndef(maps_support). maps_support() -> false. diff --git a/src/jsx_consult.erl b/src/jsx_consult.erl index 2b0f1da..0c9284e 100644 --- a/src/jsx_consult.erl +++ b/src/jsx_consult.erl @@ -58,6 +58,8 @@ -endif. +-spec consult(File::file:name_all(), Config::config()) -> [json_value()]. + -ifdef(maps_always). opts(Opts) -> [return_maps, multi_term] ++ Opts. -endif. @@ -65,8 +67,6 @@ opts(Opts) -> [return_maps, multi_term] ++ Opts. opts(Opts) -> [multi_term] ++ Opts. -endif. --spec consult(File::file:name_all(), Config::config()) -> [json_value()]. - consult(File, Config) when is_list(Config) -> case file:read_file(File) of {ok, Bin} -> diff --git a/src/jsx_decoder.erl b/src/jsx_decoder.erl index 5b6d300..0f03975 100644 --- a/src/jsx_decoder.erl +++ b/src/jsx_decoder.erl @@ -1010,7 +1010,8 @@ finish_number(Rest, Handler, Acc, Stack, Config) -> -ifndef(no_binary_to_whatever). format_number({integer, Acc}) -> {integer, binary_to_integer(Acc)}; format_number({float, Acc}) -> {float, binary_to_float(Acc)}. --else. +-endif. +-ifdef(no_binary_to_whatever). format_number({integer, Acc}) -> {integer, list_to_integer(unicode:characters_to_list(Acc))}; format_number({float, Acc}) -> {float, list_to_float(unicode:characters_to_list(Acc))}. -endif.