unifies options to encoder/decoder to allow abstraction over various different built in iterators
This commit is contained in:
parent
c743debc6d
commit
3bf5506292
4 changed files with 16 additions and 11 deletions
11
src/jsx.erl
11
src/jsx.erl
|
@ -47,7 +47,7 @@
|
|||
parser() -> decoder([]).
|
||||
|
||||
|
||||
-spec parser(OptsList::jsx_decoder_opts()) -> jsx_decoder().
|
||||
-spec parser(OptsList::jsx_opts()) -> jsx_decoder().
|
||||
|
||||
parser(OptsList) -> decoder(OptsList).
|
||||
|
||||
|
@ -58,7 +58,7 @@ parser(OptsList) -> decoder(OptsList).
|
|||
decoder() -> decoder([]).
|
||||
|
||||
|
||||
-spec decoder(OptsList::jsx_decoder_opts()) -> jsx_decoder().
|
||||
-spec decoder(OptsList::jsx_opts()) -> jsx_decoder().
|
||||
|
||||
|
||||
decoder(OptsList) ->
|
||||
|
@ -74,7 +74,12 @@ decoder(OptsList) ->
|
|||
|
||||
-spec encoder() -> jsx_encoder().
|
||||
|
||||
encoder() -> jsx_encoder:encoder().
|
||||
encoder() -> encoder([]).
|
||||
|
||||
|
||||
-spec encoder(OptsList::jsx_opts()) -> jsx_encoder().
|
||||
|
||||
encoder(Opts) -> jsx_encoder:encoder(Opts).
|
||||
|
||||
|
||||
-spec json_to_term(JSON::binary()) -> eep0018().
|
||||
|
|
|
@ -32,8 +32,8 @@
|
|||
|
||||
|
||||
|
||||
-type jsx_decoder_opts() :: [jsx_decoder_opt()].
|
||||
-type jsx_decoder_opt() :: {escaped_unicode, ascii | codepoint | none}
|
||||
-type jsx_opts() :: [jsx_opt()].
|
||||
-type jsx_opt() :: {escaped_unicode, ascii | codepoint | none}
|
||||
| {multi_term, true | false}
|
||||
| {encoding, auto
|
||||
| utf8
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
%% this file should take that into account
|
||||
|
||||
|
||||
-spec decoder(OptsList::jsx_decoder_opts()) -> jsx_decoder().
|
||||
-spec decoder(OptsList::jsx_opts()) -> jsx_decoder().
|
||||
|
||||
%% opts record for decoder
|
||||
-record(opts, {
|
||||
|
|
|
@ -24,16 +24,16 @@
|
|||
-module(jsx_encoder).
|
||||
|
||||
|
||||
-export([encoder/0]).
|
||||
-export([encoder/1]).
|
||||
|
||||
|
||||
-include("jsx_common.hrl").
|
||||
|
||||
|
||||
|
||||
-spec encoder() -> jsx_encoder().
|
||||
-spec encoder(Opts::jsx_opts()) -> jsx_encoder().
|
||||
|
||||
encoder() -> fun(Forms) -> start(Forms) end.
|
||||
encoder(_) -> fun(Forms) -> start(Forms) end.
|
||||
|
||||
|
||||
-define(ENDJSON,
|
||||
|
@ -130,7 +130,7 @@ encode(Terms) -> encode_whole(Terms) andalso encode_incremental(Terms).
|
|||
|
||||
|
||||
encode_whole(Terms) ->
|
||||
case loop((encoder())(Terms), []) of
|
||||
case loop((encoder([]))(Terms), []) of
|
||||
%% unwrap naked values
|
||||
{ok, [Terms]} -> true
|
||||
; {ok, Terms} -> true
|
||||
|
@ -139,7 +139,7 @@ encode_whole(Terms) ->
|
|||
|
||||
|
||||
encode_incremental(Terms) when is_list(Terms) ->
|
||||
encode_incremental(Terms, encoder(), Terms, []);
|
||||
encode_incremental(Terms, encoder([]), Terms, []);
|
||||
%% we could feed naked terms to the regular encoder, but we already do that, so
|
||||
%% cheat instead
|
||||
encode_incremental(_) -> true.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue