You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2020/02/07 22:53:44 UTC

[couchdb] branch support-jiffy-options created (now 17ab991)

This is an automated email from the ASF dual-hosted git repository.

jaydoane pushed a change to branch support-jiffy-options
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at 17ab991  Expose `couch_util:decode/2` to support jiffy options

This branch includes the following new commits:

     new 17ab991  Expose `couch_util:decode/2` to support jiffy options

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: Expose `couch_util:decode/2` to support jiffy options

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jaydoane pushed a commit to branch support-jiffy-options
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 17ab991c338d91022a002c83ee827c7b372836fa
Author: Jay Doane <ja...@apache.org>
AuthorDate: Fri Feb 7 14:44:41 2020 -0800

    Expose `couch_util:decode/2` to support jiffy options
    
    It can be desirable in some cases for decoded JSON to e.g. return
    maps instead of the default data structure, which is not currently
    possible.
    
    This exposes a new function `couch_util:decode/2`, the second
    parameter being a list of options passed to `jiffy:decode/2`.
---
 src/couch/src/couch_util.erl              | 7 +++++--
 src/couch/test/eunit/couch_util_tests.erl | 7 +++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/couch/src/couch_util.erl b/src/couch/src/couch_util.erl
index a785e2e..dffb681 100644
--- a/src/couch/src/couch_util.erl
+++ b/src/couch/src/couch_util.erl
@@ -21,7 +21,7 @@
 -export([get_nested_json_value/2, json_user_ctx/1]).
 -export([proplist_apply_field/2, json_apply_field/2]).
 -export([to_binary/1, to_integer/1, to_list/1, url_encode/1]).
--export([json_encode/1, json_decode/1]).
+-export([json_encode/1, json_decode/1, json_decode/2]).
 -export([verify/2,simple_call/2,shutdown_sync/1]).
 -export([get_value/2, get_value/3]).
 -export([reorder_results/2]).
@@ -498,8 +498,11 @@ json_encode(V) ->
     jiffy:encode(V, [force_utf8]).
 
 json_decode(V) ->
+    json_decode(V, []).
+
+json_decode(V, Opts) ->
     try
-        jiffy:decode(V, [dedupe_keys])
+        jiffy:decode(V, [dedupe_keys | Opts])
     catch
         error:Error ->
             throw({invalid_json, Error})
diff --git a/src/couch/test/eunit/couch_util_tests.erl b/src/couch/test/eunit/couch_util_tests.erl
index 3e145c4..012c961 100644
--- a/src/couch/test/eunit/couch_util_tests.erl
+++ b/src/couch/test/eunit/couch_util_tests.erl
@@ -168,3 +168,10 @@ to_hex_test_() ->
         ?_assertEqual("", couch_util:to_hex(<<>>)),
         ?_assertEqual("010203faff", couch_util:to_hex(<<1, 2, 3, 250, 255>>))
     ].
+
+json_decode_test_() ->
+    [
+        ?_assertEqual({[]}, couch_util:json_decode(<<"{}">>)),
+        ?_assertEqual({[]}, couch_util:json_decode(<<"{}">>, [])),
+        ?_assertEqual(#{}, couch_util:json_decode(<<"{}">>, [return_maps]))
+    ].