From ae13b934c6bc5d7bbedfcae47fa6018bace3089a Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Wed, 4 Apr 2012 20:13:27 -0700 Subject: [PATCH] add {pre_encoder, F} variant of {pre_encoders, [F, G,...]} --- src/jsx_encoder.erl | 8 ++++---- src/jsx_utils.erl | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/jsx_encoder.erl b/src/jsx_encoder.erl index 7bf2b3c..cd2a08c 100644 --- a/src/jsx_encoder.erl +++ b/src/jsx_encoder.erl @@ -812,7 +812,7 @@ pre_encoders_test_() -> ] )}, {"replace lists with empty lists", ?_assertEqual( - encode(Term, [{pre_encoders, [fun(V) -> case V of [{_,_}|_] -> V; [{}] -> V; V when is_list(V) -> []; _ -> V end end]}]), + encode(Term, [{pre_encoder, fun(V) -> case V of [{_,_}|_] -> V; [{}] -> V; V when is_list(V) -> []; _ -> V end end}]), [ start_object, {key, <<"object">>}, start_object, @@ -825,7 +825,7 @@ pre_encoders_test_() -> ] )}, {"replace objects with empty objects", ?_assertEqual( - encode(Term, [{pre_encoders, [fun(V) -> case V of [{_,_}|_] -> [{}]; _ -> V end end]}]), + encode(Term, [{pre_encoder, fun(V) -> case V of [{_,_}|_] -> [{}]; _ -> V end end}]), [ start_object, end_object, @@ -833,7 +833,7 @@ pre_encoders_test_() -> ] )}, {"replace all non-list values with false", ?_assertEqual( - encode(Term, [{pre_encoders, [fun(V) when is_list(V) -> V; (_) -> false end]}]), + encode(Term, [{pre_encoder, fun(V) when is_list(V) -> V; (_) -> false end}]), [ start_object, {key, <<"object">>}, start_object, @@ -852,7 +852,7 @@ pre_encoders_test_() -> ] )}, {"replace all atoms with atom_to_list", ?_assertEqual( - encode(Term, [{pre_encoders, [fun(V) when is_atom(V) -> unicode:characters_to_binary(atom_to_list(V)); (V) -> V end]}]), + encode(Term, [{pre_encoder, fun(V) when is_atom(V) -> unicode:characters_to_binary(atom_to_list(V)); (V) -> V end}]), [ start_object, {key, <<"object">>}, start_object, diff --git a/src/jsx_utils.erl b/src/jsx_utils.erl index 2afd8db..a889cb5 100644 --- a/src/jsx_utils.erl +++ b/src/jsx_utils.erl @@ -61,6 +61,9 @@ parse_opts([relax|Rest], Opts) -> comments = true, ignored_bad_escapes = true }); +parse_opts([{pre_encoder, Encoder}|Rest], Opts) when is_function(Encoder, 1) -> + AllEncoders = Opts#opts.pre_encoders ++ [Encoder], + parse_opts(Rest, Opts#opts{pre_encoders=AllEncoders}); parse_opts([{pre_encoders, Encoders}|Rest], Opts) when is_list(Encoders) -> lists:foreach(fun(F) when is_function(F, 1) -> ok end, Encoders), AllEncoders = Opts#opts.pre_encoders ++ Encoders, @@ -94,6 +97,7 @@ valid_flags() -> ignored_bad_escapes, explicit_end, relax, + pre_encoder, pre_encoders, %% deprecated flags loose_unicode, %% replaced_bad_utf8