diff options
| author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-08-23 14:10:47 +0100 |
|---|---|---|
| committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-08-23 14:10:47 +0100 |
| commit | 7d18df4abe95b83e40ed23cb345eaa5fb279b59c (patch) | |
| tree | a0590d9cf5c3b8af0cd2c9037ab7e0445c8367b1 /src | |
| parent | d433235b25c9a2dfb8e56aea7d66e5ef181ceca5 (diff) | |
| download | rabbitmq-server-git-7d18df4abe95b83e40ed23cb345eaa5fb279b59c.tar.gz | |
wrappers around mochijson2 to catch exceptions
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_misc.erl | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 8f6a9bcf4e..69d96ad4ec 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -60,6 +60,7 @@ -export([multi_call/2]). -export([os_cmd/1]). -export([gb_sets_difference/2]). +-export([json_encode/1, json_decode/1]). %% Horrible macro to use in guards -define(IS_BENIGN_EXIT(R), @@ -217,6 +218,8 @@ ([pid()], any()) -> {[{pid(), any()}], [{pid(), any()}]}). -spec(os_cmd/1 :: (string()) -> string()). -spec(gb_sets_difference/2 :: (gb_set(), gb_set()) -> gb_set()). +-spec(json_encode/1 :: (any()) -> string() | {'error', any()}). +-spec(json_decode/1 :: (string()) -> any() | 'error'). -endif. @@ -934,3 +937,20 @@ os_cmd(Command) -> gb_sets_difference(S1, S2) -> gb_sets:fold(fun gb_sets:delete_any/2, S1, S2). + +json_encode(Term) -> + try + mochijson2:encode(Term) + catch + exit:{json_encode, E} -> + {error, E} + end. + +json_decode(Term) -> + try + mochijson2:decode(Term) + catch + %% Sadly `mochijson2:decode/1' does not offer a nice way to catch + %% decoding errors... + error:_ -> error + end. |
