From 2054f93657cb57be30afa0dd45c129ed94399c40 Mon Sep 17 00:00:00 2001 From: Peter Lemenkov Date: Mon, 7 Jun 2010 23:01:25 +0400 Subject: [PATCH 7/9] Fix for system-wide mochiweb --- src/couchdb/couch_db.hrl | 4 ++-- src/couchdb/couch_util.erl | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/couchdb/couch_db.hrl b/src/couchdb/couch_db.hrl index ead7841..a07863f 100644 --- a/src/couchdb/couch_db.hrl +++ b/src/couchdb/couch_db.hrl @@ -14,8 +14,8 @@ -define(DESIGN_DOC_PREFIX0, "_design"). -define(DESIGN_DOC_PREFIX, "_design/"). --define(JSON_ENCODE(V), mochijson2:encode(V)). --define(JSON_DECODE(V), mochijson2:decode(V)). +-define(JSON_ENCODE(V), couch_util:json_encode(V)). +-define(JSON_DECODE(V), couch_util:json_decode(V)). -define(b2l(V), binary_to_list(V)). -define(l2b(V), list_to_binary(V)). diff --git a/src/couchdb/couch_util.erl b/src/couchdb/couch_util.erl index d655989..67854fb 100644 --- a/src/couchdb/couch_util.erl +++ b/src/couchdb/couch_util.erl @@ -21,6 +21,7 @@ -export([file_read_size/1, get_nested_json_value/2, json_user_ctx/1]). -export([to_binary/1, to_list/1, url_encode/1]). -export([verify/2]). +-export([json_encode/1, json_decode/1]). -include("couch_db.hrl"). -include_lib("kernel/include/file.hrl"). @@ -397,6 +398,19 @@ url_encode([H|T]) -> url_encode([]) -> []. +json_encode(V) -> + Handler = + fun({L}) when is_list(L) -> + {struct,L}; + (Bad) -> + exit({json_encode, {bad_term, Bad}}) + end, + (mochijson2:encoder([{handler, Handler}]))(V). + +json_decode(V) -> + try (mochijson2:decoder([{object_hook, fun({struct,L}) -> {L} end}]))(V) + catch _:_ -> throw({invalid_json,V}) end. + verify([X|RestX], [Y|RestY], Result) -> verify(RestX, RestY, (X bxor Y) bor Result); verify([], [], Result) -> -- 1.6.6.1