unifies options to encoder/decoder to allow abstraction over various different built in iterators

This commit is contained in:
alisdair sullivan 2011-07-21 06:14:48 -07:00
parent c743debc6d
commit 3bf5506292
4 changed files with 16 additions and 11 deletions

View file

@ -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().

View file

@ -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

View file

@ -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, {

View file

@ -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.