/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.googlecode.android_scripting.jsonrpc; import com.googlecode.android_scripting.Sl4aErrors; import com.googlecode.android_scripting.Sl4aException; import org.json.JSONException; import org.json.JSONObject; /** * Represents a JSON RPC result. * * @see http://json-rpc.org/wiki/specification */ public class JsonRpcResult { private JsonRpcResult() { // Utility class. } /** * Returns a JSON-RPC 1.0 formatted request response. * * @param id the id given by the request * @param data the data to pass into the result field * @return a JSON-RPC 1.0 formatted request response * @throws JSONException if JsonBuilder.build() cannot correctly convert the object into JSON */ public static JSONObject result(Object id, Object data) throws JSONException { JSONObject response = new JSONObject(); response.put("id", id); response.put("result", JsonBuilder.build(data)); response.put("error", JSONObject.NULL); return response; } /** * Returns a JSON-RPC 2.0 formatted error response. * * @param id the id given by the request * @param message the error message to send * @return a JSON-RPC 2.0 formatted request response * @throws JSONException if the world is ending */ public static JSONObject error(Object id, Object message) throws JSONException { JSONObject response = new JSONObject(); if (id == null) { id = JSONObject.NULL; } response.put("id", id); response.put("result", JSONObject.NULL); response.put("error", message.toString()); return response; } /** * Returns a JSON-RPC 2.0 formatted error response. * * @param id the id given by the request * @param sl4aException the Sl4aException to send over JSON-RPC * @return a JSON-RPC 2.0 formatted error response * @throws JSONException if the world is ending */ public static JSONObject error(Object id, Sl4aException sl4aException) throws JSONException { JSONObject response = new JSONObject(); if (id == null) { id = JSONObject.NULL; } response.put("id", id); response.put("result", JSONObject.NULL); JSONObject error = new JSONObject(); error.put("code", sl4aException.getErrorCode()); error.put("message", sl4aException.getErrorMessage()); response.put("error", error); return response; } /** * Returns a JSON-RPC 2.0 formatted error response. * * @param id the id given by the request * @param sl4aError the Sl4aErrors object to send over JSON-RPC * @param details additional data associated with the error * @return a JSON-RPC 1.0 formatted error response * @throws JSONException if details cannot be converted to JSON */ public static JSONObject error(Object id, Sl4aErrors sl4aError, Object details) throws JSONException { return error(id, sl4aError.getError(), details); } /** * Returns a JSON-RPC 2.0 formatted error response. * * @param id the id given by the request * @param sl4aException the Sl4aException to send over JSON-RPC * @param details additional data associated with the error * @return a JSON-RPC 2.0 formatted error response * @throws JSONException if the world is ending */ public static JSONObject error(Object id, Sl4aException sl4aException, Object details) throws JSONException { JSONObject returnValue = error(id, sl4aException); returnValue.getJSONObject("error").put("data", details); return returnValue; } /** * A function that returns a valid JSON-RPC error as a string when all else has failed. * * @return a String representation of {@see Sl4aErrors.JSON_RPC_UNKNOWN_EXCEPTION} in JSON */ public static String wtf() { Sl4aException exception = Sl4aErrors.JSON_RPC_UNKNOWN_EXCEPTION.getError(); return "{\"id\":null," + "\"error\":{" + "\"code\":" + exception.getErrorCode() + "," + "\"message\":\"" + exception.getErrorMessage() + "\"}}"; } }