From ec5f59dac8d5eca3504ec5fe205dcb7d8fd382a6 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 16 Nov 2009 06:00:12 +0000 Subject: Fixed support for nested elements and lists. Improved failure/error reporting monad. Minor code cleanup. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880598 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/sca/modules/json/json.hpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'cpp/sca/modules/json/json.hpp') diff --git a/cpp/sca/modules/json/json.hpp b/cpp/sca/modules/json/json.hpp index 0d21cfe359..f6c8eb5fe8 100644 --- a/cpp/sca/modules/json/json.hpp +++ b/cpp/sca/modules/json/json.hpp @@ -200,7 +200,7 @@ failable consume(JSONParser* parser, const list& return true; JSString* jstr = JS_NewStringCopyZ(cx, car(ilist).c_str()); if(!JS_ConsumeJSONText(cx, parser, JS_GetStringChars(jstr), JS_GetStringLength(jstr))) - return "JS_ConsumeJSONText failed"; + return mkfailure("JS_ConsumeJSONText failed"); return consume(parser, cdr(ilist), cx); } @@ -211,14 +211,14 @@ const failable, std::string> readJSON(const list& ilist jsval val; JSONParser* parser = JS_BeginJSONParse(cx, &val); if(parser == NULL) - return std::string("JS_BeginJSONParse failed"); + return mkfailure, std::string>("JS_BeginJSONParse failed"); const failable consumed = consume(parser, ilist, cx); if(!JS_FinishJSONParse(cx, parser, JSVAL_NULL)) - return std::string("JS_FinishJSONParse failed"); + return mkfailure, std::string>("JS_FinishJSONParse failed"); if(!hasValue(consumed)) - return std::string(consumed); + return mkfailure, std::string>(reason(consumed)); return list(jsValToValue(val, cx)); } @@ -357,11 +357,11 @@ template const failable writeJSON(const lambda w = writeList(l, o, cx); if (!hasValue(w)) - return std::string(w); + return mkfailure(reason(w)); WriteContext wcx(reduce, initial, cx); if (!JS_Stringify(cx, &val, NULL, JSVAL_NULL, writeCallback, &wcx)) - return std::string("JS_Stringify failed"); + return mkfailure("JS_Stringify failed"); return wcx.accum; } @@ -380,8 +380,7 @@ const failable, std::string> writeJSON(const list& l, c */ const failable, std::string> jsonRequest(const value& id, const value& func, const value& params, json::JSONContext& cx) { const list r = mklist(mklist("id", id), mklist("method", func), mklist("params", params)); - failable, std::string> ls = writeJSON(valuesToElements(r), cx); - return ls; + return writeJSON(valuesToElements(r), cx); } /** -- cgit v1.2.3