diff options
Diffstat (limited to 'redfish-core/include/utils')
| -rw-r--r-- | redfish-core/include/utils/json_utils.hpp | 279 |
1 files changed, 5 insertions, 274 deletions
diff --git a/redfish-core/include/utils/json_utils.hpp b/redfish-core/include/utils/json_utils.hpp index 3263c73..b8195c4 100644 --- a/redfish-core/include/utils/json_utils.hpp +++ b/redfish-core/include/utils/json_utils.hpp @@ -28,264 +28,6 @@ namespace json_util { /** - * @brief Defines JSON utils operation status - */ -enum class Result -{ - SUCCESS, - NOT_EXIST, - WRONG_TYPE, - NULL_POINTER -}; - -/** - * @brief Describes JSON utils messages requirement - */ -enum class MessageSetting -{ - NONE = 0x0, ///< No messages will be added - MISSING = 0x1, ///< PropertyMissing message will be added - TYPE_ERROR = 0x2 ///< PropertyValueTypeError message will be added -}; - -/** - * @brief Wrapper function for extracting string from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getString(const char* fieldName, const nlohmann::json& json, - const std::string*& output); - -/** - * @brief Wrapper function for extracting object from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getObject(const char* fieldName, const nlohmann::json& json, - nlohmann::json* output); - -/** - * @brief Wrapper function for extracting array from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getArray(const char* fieldName, const nlohmann::json& json, - nlohmann::json* output); - -/** - * @brief Wrapper function for extracting int from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getInt(const char* fieldName, const nlohmann::json& json, - int64_t& output); - -/** - * @brief Wrapper function for extracting uint from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getUnsigned(const char* fieldName, const nlohmann::json& json, - uint64_t& output); - -/** - * @brief Wrapper function for extracting bool from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getBool(const char* fieldName, const nlohmann::json& json, bool& output); - -/** - * @brief Wrapper function for extracting float from JSON object without - * throwing exceptions (nlohmann stores JSON floats as C++ doubles) - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getDouble(const char* fieldName, const nlohmann::json& json, - double& output); - -/** - * @brief Wrapper function for extracting string from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getString(const char* fieldName, const nlohmann::json& json, - const std::string*& output, uint8_t msgCfgMap, - nlohmann::json& msgJson, const std::string&& fieldPath); - -/** - * @brief Wrapper function for extracting object from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getObject(const char* fieldName, const nlohmann::json& json, - nlohmann::json* output, uint8_t msgCfgMap, - nlohmann::json& msgJson, const std::string&& fieldPath); - -/** - * @brief Wrapper function for extracting array from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getArray(const char* fieldName, const nlohmann::json& json, - nlohmann::json* output, uint8_t msgCfgMap, - nlohmann::json& msgJson, const std::string&& fieldPath); - -/** - * @brief Wrapper function for extracting int from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getInt(const char* fieldName, const nlohmann::json& json, - int64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, - const std::string&& fieldPath); - -/** - * @brief Wrapper function for extracting uint from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getUnsigned(const char* fieldName, const nlohmann::json& json, - uint64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, - const std::string&& fieldPath); - -/** - * @brief Wrapper function for extracting bool from JSON object without - * throwing exceptions - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getBool(const char* fieldName, const nlohmann::json& json, bool& output, - uint8_t msgCfgMap, nlohmann::json& msgJson, - const std::string&& fieldPath); - -/** - * @brief Wrapper function for extracting float from JSON object without - * throwing exceptions (nlohmann stores JSON floats as C++ doubles) - * - * @param[in] fieldName Name of requested field - * @param[in] json JSON object from which field should be extracted - * @param[out] output Variable to which extracted will be written in case - * of success - * @param[in] msgCfgMap Map for message addition settings - * @param[out] msgJson JSON to which error messages will be added - * @param[in] fieldPath Field path in JSON - * - * @return Result informing about operation status, output will be - * written only in case of Result::SUCCESS - */ -Result getDouble(const char* fieldName, const nlohmann::json& json, - double& output, uint8_t msgCfgMap, nlohmann::json& msgJson, - const std::string&& fieldPath); - -/** * @brief Processes request to extract JSON from its body. If it fails, adds * MalformedJSON message to response and ends it. * @@ -318,9 +60,7 @@ void readJsonValues(const std::string& key, nlohmann::json& jsonValue, crow::Response& res, std::bitset<Count>& handled) { BMCWEB_LOG_DEBUG << "Unable to find variable for key" << key; - messages::addMessageToErrorJson(res.jsonValue, - messages::propertyUnknown(key)); - res.result(boost::beast::http::status::bad_request); + messages::propertyUnknown(res, key, key); } template <size_t Count, size_t Index, typename ValueType, @@ -344,11 +84,7 @@ void readJsonValues(const std::string& key, nlohmann::json& jsonValue, { BMCWEB_LOG_DEBUG << "Value for key " << key << " was incorrect type: " << jsonValue.type_name(); - messages::addMessageToErrorJson( - res.jsonValue, - messages::propertyValueTypeError(jsonValue.dump(), key)); - res.result(boost::beast::http::status::bad_request); - + messages::propertyValueTypeError(res, jsonValue.dump(), key, key); return; } @@ -367,9 +103,7 @@ void handleMissing(std::bitset<Count>& handled, crow::Response& res, { if (!handled.test(Index) && unpackValue<ValueType>::isRequired::value) { - messages::addMessageToErrorJson(res.jsonValue, - messages::propertyMissing(key)); - res.result(boost::beast::http::status::bad_request); + messages::propertyMissing(res, key, key); } details::handleMissing<Index + 1, Count>(handled, res, in...); } @@ -388,17 +122,14 @@ bool readJson(const crow::Request& req, crow::Response& res, const char* key, if (!jsonRequest.is_object()) { BMCWEB_LOG_DEBUG << "Json value is not an object"; - messages::addMessageToErrorJson(res.jsonValue, - messages::unrecognizedRequestBody()); - res.result(boost::beast::http::status::bad_request); + messages::unrecognizedRequestBody(res); return false; } if (jsonRequest.empty()) { BMCWEB_LOG_DEBUG << "Json value is empty"; - messages::addMessageToErrorJson(res.jsonValue, messages::emptyJSON()); - res.result(boost::beast::http::status::bad_request); + messages::emptyJSON(res); return false; } |

