177dd8813SKowalski, Kamil /* 277dd8813SKowalski, Kamil // Copyright (c) 2018 Intel Corporation 377dd8813SKowalski, Kamil // 477dd8813SKowalski, Kamil // Licensed under the Apache License, Version 2.0 (the "License"); 577dd8813SKowalski, Kamil // you may not use this file except in compliance with the License. 677dd8813SKowalski, Kamil // You may obtain a copy of the License at 777dd8813SKowalski, Kamil // 877dd8813SKowalski, Kamil // http://www.apache.org/licenses/LICENSE-2.0 977dd8813SKowalski, Kamil // 1077dd8813SKowalski, Kamil // Unless required by applicable law or agreed to in writing, software 1177dd8813SKowalski, Kamil // distributed under the License is distributed on an "AS IS" BASIS, 1277dd8813SKowalski, Kamil // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377dd8813SKowalski, Kamil // See the License for the specific language governing permissions and 1477dd8813SKowalski, Kamil // limitations under the License. 1577dd8813SKowalski, Kamil */ 1677dd8813SKowalski, Kamil #include "utils/json_utils.hpp" 1777dd8813SKowalski, Kamil #include <error_messages.hpp> 1877dd8813SKowalski, Kamil 1977dd8813SKowalski, Kamil namespace redfish { 2077dd8813SKowalski, Kamil 2177dd8813SKowalski, Kamil namespace json_util { 2277dd8813SKowalski, Kamil 2377dd8813SKowalski, Kamil Result getString(const char* fieldName, const nlohmann::json& json, 2477dd8813SKowalski, Kamil const std::string*& output) { 2577dd8813SKowalski, Kamil // Find field 2677dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 2777dd8813SKowalski, Kamil 2877dd8813SKowalski, Kamil // Verify existence 2977dd8813SKowalski, Kamil if (fieldIt == json.end()) { 3077dd8813SKowalski, Kamil return Result::NOT_EXIST; 3177dd8813SKowalski, Kamil } 3277dd8813SKowalski, Kamil 3377dd8813SKowalski, Kamil output = fieldIt->get_ptr<const std::string*>(); 3477dd8813SKowalski, Kamil 3577dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 3677dd8813SKowalski, Kamil if (output == nullptr) { 3777dd8813SKowalski, Kamil return Result::WRONG_TYPE; 3877dd8813SKowalski, Kamil } 3977dd8813SKowalski, Kamil 4077dd8813SKowalski, Kamil return Result::SUCCESS; 4177dd8813SKowalski, Kamil } 4277dd8813SKowalski, Kamil 4377dd8813SKowalski, Kamil Result getObject(const char* fieldName, const nlohmann::json& json, 4477dd8813SKowalski, Kamil nlohmann::json* output) { 4577dd8813SKowalski, Kamil // Verify input pointer 4677dd8813SKowalski, Kamil if (output == nullptr) { 4777dd8813SKowalski, Kamil return Result::NULL_POINTER; 4877dd8813SKowalski, Kamil } 4977dd8813SKowalski, Kamil 5077dd8813SKowalski, Kamil // Find field 5177dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 5277dd8813SKowalski, Kamil 5377dd8813SKowalski, Kamil // Verify existence 5477dd8813SKowalski, Kamil if (fieldIt == json.end()) { 5577dd8813SKowalski, Kamil return Result::NOT_EXIST; 5677dd8813SKowalski, Kamil } 5777dd8813SKowalski, Kamil 5877dd8813SKowalski, Kamil // Verify type 5977dd8813SKowalski, Kamil if (!fieldIt->is_object()) { 6077dd8813SKowalski, Kamil return Result::WRONG_TYPE; 6177dd8813SKowalski, Kamil } 6277dd8813SKowalski, Kamil 6377dd8813SKowalski, Kamil // Extract value 6477dd8813SKowalski, Kamil *output = *fieldIt; 6577dd8813SKowalski, Kamil 6677dd8813SKowalski, Kamil return Result::SUCCESS; 6777dd8813SKowalski, Kamil } 6877dd8813SKowalski, Kamil 6977dd8813SKowalski, Kamil Result getArray(const char* fieldName, const nlohmann::json& json, 7077dd8813SKowalski, Kamil nlohmann::json* output) { 7177dd8813SKowalski, Kamil // Verify input pointer 7277dd8813SKowalski, Kamil if (output == nullptr) { 7377dd8813SKowalski, Kamil return Result::NULL_POINTER; 7477dd8813SKowalski, Kamil } 7577dd8813SKowalski, Kamil 7677dd8813SKowalski, Kamil // Find field 7777dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 7877dd8813SKowalski, Kamil 7977dd8813SKowalski, Kamil // Verify existence 8077dd8813SKowalski, Kamil if (fieldIt == json.end()) { 8177dd8813SKowalski, Kamil return Result::NOT_EXIST; 8277dd8813SKowalski, Kamil } 8377dd8813SKowalski, Kamil 8477dd8813SKowalski, Kamil // Verify type 8577dd8813SKowalski, Kamil if (!fieldIt->is_array()) { 8677dd8813SKowalski, Kamil return Result::WRONG_TYPE; 8777dd8813SKowalski, Kamil } 8877dd8813SKowalski, Kamil 8977dd8813SKowalski, Kamil // Extract value 9077dd8813SKowalski, Kamil *output = *fieldIt; 9177dd8813SKowalski, Kamil 9277dd8813SKowalski, Kamil return Result::SUCCESS; 9377dd8813SKowalski, Kamil } 9477dd8813SKowalski, Kamil 9577dd8813SKowalski, Kamil Result getInt(const char* fieldName, const nlohmann::json& json, 9677dd8813SKowalski, Kamil int64_t& output) { 9777dd8813SKowalski, Kamil // Find field 9877dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 9977dd8813SKowalski, Kamil 10077dd8813SKowalski, Kamil // Verify existence 10177dd8813SKowalski, Kamil if (fieldIt == json.end()) { 10277dd8813SKowalski, Kamil return Result::NOT_EXIST; 10377dd8813SKowalski, Kamil } 10477dd8813SKowalski, Kamil 10577dd8813SKowalski, Kamil const int64_t* retVal = fieldIt->get_ptr<const int64_t*>(); 10677dd8813SKowalski, Kamil 10777dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 10877dd8813SKowalski, Kamil if (retVal == nullptr) { 10977dd8813SKowalski, Kamil return Result::WRONG_TYPE; 11077dd8813SKowalski, Kamil } 11177dd8813SKowalski, Kamil 11277dd8813SKowalski, Kamil // Extract value 11377dd8813SKowalski, Kamil output = *retVal; 11477dd8813SKowalski, Kamil 11577dd8813SKowalski, Kamil return Result::SUCCESS; 11677dd8813SKowalski, Kamil } 11777dd8813SKowalski, Kamil 11877dd8813SKowalski, Kamil Result getUnsigned(const char* fieldName, const nlohmann::json& json, 11977dd8813SKowalski, Kamil uint64_t& output) { 12077dd8813SKowalski, Kamil // Find field 12177dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 12277dd8813SKowalski, Kamil 12377dd8813SKowalski, Kamil // Verify existence 12477dd8813SKowalski, Kamil if (fieldIt == json.end()) { 12577dd8813SKowalski, Kamil return Result::NOT_EXIST; 12677dd8813SKowalski, Kamil } 12777dd8813SKowalski, Kamil 12877dd8813SKowalski, Kamil const uint64_t* retVal = fieldIt->get_ptr<const uint64_t*>(); 12977dd8813SKowalski, Kamil 13077dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 13177dd8813SKowalski, Kamil if (retVal == nullptr) { 13277dd8813SKowalski, Kamil return Result::WRONG_TYPE; 13377dd8813SKowalski, Kamil } 13477dd8813SKowalski, Kamil 13577dd8813SKowalski, Kamil // Extract value 13677dd8813SKowalski, Kamil output = *retVal; 13777dd8813SKowalski, Kamil 13877dd8813SKowalski, Kamil return Result::SUCCESS; 13977dd8813SKowalski, Kamil } 14077dd8813SKowalski, Kamil 14177dd8813SKowalski, Kamil Result getBool(const char* fieldName, const nlohmann::json& json, 14277dd8813SKowalski, Kamil bool& output) { 14377dd8813SKowalski, Kamil // Find field 14477dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 14577dd8813SKowalski, Kamil 14677dd8813SKowalski, Kamil // Verify existence 14777dd8813SKowalski, Kamil if (fieldIt == json.end()) { 14877dd8813SKowalski, Kamil return Result::NOT_EXIST; 14977dd8813SKowalski, Kamil } 15077dd8813SKowalski, Kamil 15177dd8813SKowalski, Kamil const bool* retVal = fieldIt->get_ptr<const bool*>(); 15277dd8813SKowalski, Kamil 15377dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 15477dd8813SKowalski, Kamil if (retVal == nullptr) { 15577dd8813SKowalski, Kamil return Result::WRONG_TYPE; 15677dd8813SKowalski, Kamil } 15777dd8813SKowalski, Kamil 15877dd8813SKowalski, Kamil // Extract value 15977dd8813SKowalski, Kamil output = *retVal; 16077dd8813SKowalski, Kamil 16177dd8813SKowalski, Kamil return Result::SUCCESS; 16277dd8813SKowalski, Kamil } 16377dd8813SKowalski, Kamil 16477dd8813SKowalski, Kamil Result getDouble(const char* fieldName, const nlohmann::json& json, 16577dd8813SKowalski, Kamil double& output) { 16677dd8813SKowalski, Kamil // Find field 16777dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 16877dd8813SKowalski, Kamil 16977dd8813SKowalski, Kamil // Verify existence 17077dd8813SKowalski, Kamil if (fieldIt == json.end()) { 17177dd8813SKowalski, Kamil return Result::NOT_EXIST; 17277dd8813SKowalski, Kamil } 17377dd8813SKowalski, Kamil 17477dd8813SKowalski, Kamil const double* retVal = fieldIt->get_ptr<const double*>(); 17577dd8813SKowalski, Kamil 17677dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 17777dd8813SKowalski, Kamil if (retVal == nullptr) { 17877dd8813SKowalski, Kamil return Result::WRONG_TYPE; 17977dd8813SKowalski, Kamil } 18077dd8813SKowalski, Kamil 18177dd8813SKowalski, Kamil // Extract value 18277dd8813SKowalski, Kamil output = *retVal; 18377dd8813SKowalski, Kamil 18477dd8813SKowalski, Kamil return Result::SUCCESS; 18577dd8813SKowalski, Kamil } 18677dd8813SKowalski, Kamil 18777dd8813SKowalski, Kamil Result getString(const char* fieldName, const nlohmann::json& json, 18877dd8813SKowalski, Kamil const std::string*& output, uint8_t msgCfgMap, 18977dd8813SKowalski, Kamil nlohmann::json& msgJson, const std::string&& fieldPath) { 19077dd8813SKowalski, Kamil // Find field 19177dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 19277dd8813SKowalski, Kamil 19377dd8813SKowalski, Kamil // Verify existence 19477dd8813SKowalski, Kamil if (fieldIt == json.end()) { 19577dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 19677dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 19777dd8813SKowalski, Kamil fieldPath); 19877dd8813SKowalski, Kamil } 19977dd8813SKowalski, Kamil 20077dd8813SKowalski, Kamil return Result::NOT_EXIST; 20177dd8813SKowalski, Kamil } 20277dd8813SKowalski, Kamil 20377dd8813SKowalski, Kamil output = fieldIt->get_ptr<const std::string*>(); 20477dd8813SKowalski, Kamil 20577dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 20677dd8813SKowalski, Kamil if (output == nullptr) { 20777dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 20877dd8813SKowalski, Kamil messages::addMessageToJson( 20977dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 21077dd8813SKowalski, Kamil fieldPath); 21177dd8813SKowalski, Kamil } 21277dd8813SKowalski, Kamil 21377dd8813SKowalski, Kamil return Result::WRONG_TYPE; 21477dd8813SKowalski, Kamil } 21577dd8813SKowalski, Kamil 21677dd8813SKowalski, Kamil return Result::SUCCESS; 21777dd8813SKowalski, Kamil } 21877dd8813SKowalski, Kamil 21977dd8813SKowalski, Kamil Result getObject(const char* fieldName, const nlohmann::json& json, 22077dd8813SKowalski, Kamil nlohmann::json* output, uint8_t msgCfgMap, 22177dd8813SKowalski, Kamil nlohmann::json& msgJson, const std::string&& fieldPath) { 22277dd8813SKowalski, Kamil // Verify input pointer 22377dd8813SKowalski, Kamil if (output == nullptr) { 22477dd8813SKowalski, Kamil return Result::NULL_POINTER; 22577dd8813SKowalski, Kamil } 22677dd8813SKowalski, Kamil 22777dd8813SKowalski, Kamil // Find field 22877dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 22977dd8813SKowalski, Kamil 23077dd8813SKowalski, Kamil // Verify existence 23177dd8813SKowalski, Kamil if (fieldIt == json.end()) { 23277dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 23377dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 23477dd8813SKowalski, Kamil fieldPath); 23577dd8813SKowalski, Kamil } 23677dd8813SKowalski, Kamil 23777dd8813SKowalski, Kamil return Result::NOT_EXIST; 23877dd8813SKowalski, Kamil } 23977dd8813SKowalski, Kamil 24077dd8813SKowalski, Kamil // Verify type 24177dd8813SKowalski, Kamil if (!fieldIt->is_object()) { 24277dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 24377dd8813SKowalski, Kamil messages::addMessageToJson( 24477dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 24577dd8813SKowalski, Kamil fieldPath); 24677dd8813SKowalski, Kamil } 24777dd8813SKowalski, Kamil 24877dd8813SKowalski, Kamil return Result::WRONG_TYPE; 24977dd8813SKowalski, Kamil } 25077dd8813SKowalski, Kamil 25177dd8813SKowalski, Kamil // Extract value 25277dd8813SKowalski, Kamil *output = *fieldIt; 25377dd8813SKowalski, Kamil 25477dd8813SKowalski, Kamil return Result::SUCCESS; 25577dd8813SKowalski, Kamil } 25677dd8813SKowalski, Kamil 25777dd8813SKowalski, Kamil Result getArray(const char* fieldName, const nlohmann::json& json, 25877dd8813SKowalski, Kamil nlohmann::json* output, uint8_t msgCfgMap, 25977dd8813SKowalski, Kamil nlohmann::json& msgJson, const std::string&& fieldPath) { 26077dd8813SKowalski, Kamil // Verify input pointer 26177dd8813SKowalski, Kamil if (output == nullptr) { 26277dd8813SKowalski, Kamil return Result::NULL_POINTER; 26377dd8813SKowalski, Kamil } 26477dd8813SKowalski, Kamil 26577dd8813SKowalski, Kamil // Find field 26677dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 26777dd8813SKowalski, Kamil 26877dd8813SKowalski, Kamil // Verify existence 26977dd8813SKowalski, Kamil if (fieldIt == json.end()) { 27077dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 27177dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 27277dd8813SKowalski, Kamil fieldPath); 27377dd8813SKowalski, Kamil } 27477dd8813SKowalski, Kamil 27577dd8813SKowalski, Kamil return Result::NOT_EXIST; 27677dd8813SKowalski, Kamil } 27777dd8813SKowalski, Kamil 27877dd8813SKowalski, Kamil // Verify type 27977dd8813SKowalski, Kamil if (!fieldIt->is_array()) { 28077dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 28177dd8813SKowalski, Kamil messages::addMessageToJson( 28277dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 28377dd8813SKowalski, Kamil fieldPath); 28477dd8813SKowalski, Kamil } 28577dd8813SKowalski, Kamil 28677dd8813SKowalski, Kamil return Result::WRONG_TYPE; 28777dd8813SKowalski, Kamil } 28877dd8813SKowalski, Kamil 28977dd8813SKowalski, Kamil // Extract value 29077dd8813SKowalski, Kamil *output = *fieldIt; 29177dd8813SKowalski, Kamil 29277dd8813SKowalski, Kamil return Result::SUCCESS; 29377dd8813SKowalski, Kamil } 29477dd8813SKowalski, Kamil 29577dd8813SKowalski, Kamil Result getInt(const char* fieldName, const nlohmann::json& json, 29677dd8813SKowalski, Kamil int64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 29777dd8813SKowalski, Kamil const std::string&& fieldPath) { 29877dd8813SKowalski, Kamil // Find field 29977dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 30077dd8813SKowalski, Kamil 30177dd8813SKowalski, Kamil // Verify existence 30277dd8813SKowalski, Kamil if (fieldIt == json.end()) { 30377dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 30477dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 30577dd8813SKowalski, Kamil fieldPath); 30677dd8813SKowalski, Kamil } 30777dd8813SKowalski, Kamil 30877dd8813SKowalski, Kamil return Result::NOT_EXIST; 30977dd8813SKowalski, Kamil } 31077dd8813SKowalski, Kamil 31177dd8813SKowalski, Kamil const int64_t* retVal = fieldIt->get_ptr<const int64_t*>(); 31277dd8813SKowalski, Kamil 31377dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 31477dd8813SKowalski, Kamil if (retVal == nullptr) { 31577dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 31677dd8813SKowalski, Kamil messages::addMessageToJson( 31777dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 31877dd8813SKowalski, Kamil fieldPath); 31977dd8813SKowalski, Kamil } 32077dd8813SKowalski, Kamil 32177dd8813SKowalski, Kamil return Result::WRONG_TYPE; 32277dd8813SKowalski, Kamil } 32377dd8813SKowalski, Kamil 32477dd8813SKowalski, Kamil // Extract value 32577dd8813SKowalski, Kamil output = *retVal; 32677dd8813SKowalski, Kamil 32777dd8813SKowalski, Kamil return Result::SUCCESS; 32877dd8813SKowalski, Kamil } 32977dd8813SKowalski, Kamil 33077dd8813SKowalski, Kamil Result getUnsigned(const char* fieldName, const nlohmann::json& json, 33177dd8813SKowalski, Kamil uint64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 33277dd8813SKowalski, Kamil const std::string&& fieldPath) { 33377dd8813SKowalski, Kamil // Find field 33477dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 33577dd8813SKowalski, Kamil 33677dd8813SKowalski, Kamil // Verify existence 33777dd8813SKowalski, Kamil if (fieldIt == json.end()) { 33877dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 33977dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 34077dd8813SKowalski, Kamil fieldPath); 34177dd8813SKowalski, Kamil } 34277dd8813SKowalski, Kamil 34377dd8813SKowalski, Kamil return Result::NOT_EXIST; 34477dd8813SKowalski, Kamil } 34577dd8813SKowalski, Kamil 34677dd8813SKowalski, Kamil const uint64_t* retVal = fieldIt->get_ptr<const uint64_t*>(); 34777dd8813SKowalski, Kamil 34877dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 34977dd8813SKowalski, Kamil if (retVal == nullptr) { 35077dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 35177dd8813SKowalski, Kamil messages::addMessageToJson( 35277dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 35377dd8813SKowalski, Kamil fieldPath); 35477dd8813SKowalski, Kamil } 35577dd8813SKowalski, Kamil 35677dd8813SKowalski, Kamil return Result::WRONG_TYPE; 35777dd8813SKowalski, Kamil } 35877dd8813SKowalski, Kamil 35977dd8813SKowalski, Kamil // Extract value 36077dd8813SKowalski, Kamil output = *retVal; 36177dd8813SKowalski, Kamil 36277dd8813SKowalski, Kamil return Result::SUCCESS; 36377dd8813SKowalski, Kamil } 36477dd8813SKowalski, Kamil 36577dd8813SKowalski, Kamil Result getBool(const char* fieldName, const nlohmann::json& json, bool& output, 36677dd8813SKowalski, Kamil uint8_t msgCfgMap, nlohmann::json& msgJson, 36777dd8813SKowalski, Kamil const std::string&& fieldPath) { 36877dd8813SKowalski, Kamil // Find field 36977dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 37077dd8813SKowalski, Kamil 37177dd8813SKowalski, Kamil // Verify existence 37277dd8813SKowalski, Kamil if (fieldIt == json.end()) { 37377dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 37477dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 37577dd8813SKowalski, Kamil fieldPath); 37677dd8813SKowalski, Kamil } 37777dd8813SKowalski, Kamil 37877dd8813SKowalski, Kamil return Result::NOT_EXIST; 37977dd8813SKowalski, Kamil } 38077dd8813SKowalski, Kamil 38177dd8813SKowalski, Kamil const bool* retVal = fieldIt->get_ptr<const bool*>(); 38277dd8813SKowalski, Kamil 38377dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 38477dd8813SKowalski, Kamil if (retVal == nullptr) { 38577dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 38677dd8813SKowalski, Kamil messages::addMessageToJson( 38777dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 38877dd8813SKowalski, Kamil fieldPath); 38977dd8813SKowalski, Kamil } 39077dd8813SKowalski, Kamil 39177dd8813SKowalski, Kamil return Result::WRONG_TYPE; 39277dd8813SKowalski, Kamil } 39377dd8813SKowalski, Kamil 39477dd8813SKowalski, Kamil // Extract value 39577dd8813SKowalski, Kamil output = *retVal; 39677dd8813SKowalski, Kamil 39777dd8813SKowalski, Kamil return Result::SUCCESS; 39877dd8813SKowalski, Kamil } 39977dd8813SKowalski, Kamil 40077dd8813SKowalski, Kamil Result getDouble(const char* fieldName, const nlohmann::json& json, 40177dd8813SKowalski, Kamil double& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 40277dd8813SKowalski, Kamil const std::string&& fieldPath) { 40377dd8813SKowalski, Kamil // Find field 40477dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 40577dd8813SKowalski, Kamil 40677dd8813SKowalski, Kamil // Verify existence 40777dd8813SKowalski, Kamil if (fieldIt == json.end()) { 40877dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 40977dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 41077dd8813SKowalski, Kamil fieldPath); 41177dd8813SKowalski, Kamil } 41277dd8813SKowalski, Kamil 41377dd8813SKowalski, Kamil return Result::NOT_EXIST; 41477dd8813SKowalski, Kamil } 41577dd8813SKowalski, Kamil 41677dd8813SKowalski, Kamil const double* retVal = fieldIt->get_ptr<const double*>(); 41777dd8813SKowalski, Kamil 41877dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 41977dd8813SKowalski, Kamil if (retVal == nullptr) { 42077dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 42177dd8813SKowalski, Kamil messages::addMessageToJson( 42277dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 42377dd8813SKowalski, Kamil fieldPath); 42477dd8813SKowalski, Kamil } 42577dd8813SKowalski, Kamil 42677dd8813SKowalski, Kamil return Result::WRONG_TYPE; 42777dd8813SKowalski, Kamil } 42877dd8813SKowalski, Kamil 42977dd8813SKowalski, Kamil // Extract value 43077dd8813SKowalski, Kamil output = *retVal; 43177dd8813SKowalski, Kamil 43277dd8813SKowalski, Kamil return Result::SUCCESS; 43377dd8813SKowalski, Kamil } 43477dd8813SKowalski, Kamil 435*55c7b7a2SEd Tanous bool processJsonFromRequest(crow::Response& res, const crow::Request& req, 43677dd8813SKowalski, Kamil nlohmann::json& reqJson) { 43777dd8813SKowalski, Kamil reqJson = nlohmann::json::parse(req.body, nullptr, false); 43877dd8813SKowalski, Kamil 43977dd8813SKowalski, Kamil if (reqJson.is_discarded()) { 440*55c7b7a2SEd Tanous messages::addMessageToErrorJson(res.jsonValue, messages::malformedJSON()); 44177dd8813SKowalski, Kamil 442e0d918bcSEd Tanous res.result(boost::beast::http::status::bad_request); 44377dd8813SKowalski, Kamil res.end(); 44477dd8813SKowalski, Kamil 44577dd8813SKowalski, Kamil return false; 44677dd8813SKowalski, Kamil } 44777dd8813SKowalski, Kamil 44877dd8813SKowalski, Kamil return true; 44977dd8813SKowalski, Kamil } 45077dd8813SKowalski, Kamil 45177dd8813SKowalski, Kamil } // namespace json_util 45277dd8813SKowalski, Kamil 45377dd8813SKowalski, Kamil } // namespace redfish 454