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" 17*1abe55efSEd Tanous 1877dd8813SKowalski, Kamil #include <error_messages.hpp> 1977dd8813SKowalski, Kamil 20*1abe55efSEd Tanous namespace redfish 21*1abe55efSEd Tanous { 2277dd8813SKowalski, Kamil 23*1abe55efSEd Tanous namespace json_util 24*1abe55efSEd Tanous { 2577dd8813SKowalski, Kamil 2677dd8813SKowalski, Kamil Result getString(const char* fieldName, const nlohmann::json& json, 27*1abe55efSEd Tanous const std::string*& output) 28*1abe55efSEd Tanous { 2977dd8813SKowalski, Kamil // Find field 3077dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 3177dd8813SKowalski, Kamil 3277dd8813SKowalski, Kamil // Verify existence 33*1abe55efSEd Tanous if (fieldIt == json.end()) 34*1abe55efSEd Tanous { 3577dd8813SKowalski, Kamil return Result::NOT_EXIST; 3677dd8813SKowalski, Kamil } 3777dd8813SKowalski, Kamil 3877dd8813SKowalski, Kamil output = fieldIt->get_ptr<const std::string*>(); 3977dd8813SKowalski, Kamil 4077dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 41*1abe55efSEd Tanous if (output == nullptr) 42*1abe55efSEd Tanous { 4377dd8813SKowalski, Kamil return Result::WRONG_TYPE; 4477dd8813SKowalski, Kamil } 4577dd8813SKowalski, Kamil 4677dd8813SKowalski, Kamil return Result::SUCCESS; 4777dd8813SKowalski, Kamil } 4877dd8813SKowalski, Kamil 4977dd8813SKowalski, Kamil Result getObject(const char* fieldName, const nlohmann::json& json, 50*1abe55efSEd Tanous nlohmann::json* output) 51*1abe55efSEd Tanous { 5277dd8813SKowalski, Kamil // Verify input pointer 53*1abe55efSEd Tanous if (output == nullptr) 54*1abe55efSEd Tanous { 5577dd8813SKowalski, Kamil return Result::NULL_POINTER; 5677dd8813SKowalski, Kamil } 5777dd8813SKowalski, Kamil 5877dd8813SKowalski, Kamil // Find field 5977dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 6077dd8813SKowalski, Kamil 6177dd8813SKowalski, Kamil // Verify existence 62*1abe55efSEd Tanous if (fieldIt == json.end()) 63*1abe55efSEd Tanous { 6477dd8813SKowalski, Kamil return Result::NOT_EXIST; 6577dd8813SKowalski, Kamil } 6677dd8813SKowalski, Kamil 6777dd8813SKowalski, Kamil // Verify type 68*1abe55efSEd Tanous if (!fieldIt->is_object()) 69*1abe55efSEd Tanous { 7077dd8813SKowalski, Kamil return Result::WRONG_TYPE; 7177dd8813SKowalski, Kamil } 7277dd8813SKowalski, Kamil 7377dd8813SKowalski, Kamil // Extract value 7477dd8813SKowalski, Kamil *output = *fieldIt; 7577dd8813SKowalski, Kamil 7677dd8813SKowalski, Kamil return Result::SUCCESS; 7777dd8813SKowalski, Kamil } 7877dd8813SKowalski, Kamil 7977dd8813SKowalski, Kamil Result getArray(const char* fieldName, const nlohmann::json& json, 80*1abe55efSEd Tanous nlohmann::json* output) 81*1abe55efSEd Tanous { 8277dd8813SKowalski, Kamil // Verify input pointer 83*1abe55efSEd Tanous if (output == nullptr) 84*1abe55efSEd Tanous { 8577dd8813SKowalski, Kamil return Result::NULL_POINTER; 8677dd8813SKowalski, Kamil } 8777dd8813SKowalski, Kamil 8877dd8813SKowalski, Kamil // Find field 8977dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 9077dd8813SKowalski, Kamil 9177dd8813SKowalski, Kamil // Verify existence 92*1abe55efSEd Tanous if (fieldIt == json.end()) 93*1abe55efSEd Tanous { 9477dd8813SKowalski, Kamil return Result::NOT_EXIST; 9577dd8813SKowalski, Kamil } 9677dd8813SKowalski, Kamil 9777dd8813SKowalski, Kamil // Verify type 98*1abe55efSEd Tanous if (!fieldIt->is_array()) 99*1abe55efSEd Tanous { 10077dd8813SKowalski, Kamil return Result::WRONG_TYPE; 10177dd8813SKowalski, Kamil } 10277dd8813SKowalski, Kamil 10377dd8813SKowalski, Kamil // Extract value 10477dd8813SKowalski, Kamil *output = *fieldIt; 10577dd8813SKowalski, Kamil 10677dd8813SKowalski, Kamil return Result::SUCCESS; 10777dd8813SKowalski, Kamil } 10877dd8813SKowalski, Kamil 10977dd8813SKowalski, Kamil Result getInt(const char* fieldName, const nlohmann::json& json, 110*1abe55efSEd Tanous int64_t& output) 111*1abe55efSEd Tanous { 11277dd8813SKowalski, Kamil // Find field 11377dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 11477dd8813SKowalski, Kamil 11577dd8813SKowalski, Kamil // Verify existence 116*1abe55efSEd Tanous if (fieldIt == json.end()) 117*1abe55efSEd Tanous { 11877dd8813SKowalski, Kamil return Result::NOT_EXIST; 11977dd8813SKowalski, Kamil } 12077dd8813SKowalski, Kamil 12177dd8813SKowalski, Kamil const int64_t* retVal = fieldIt->get_ptr<const int64_t*>(); 12277dd8813SKowalski, Kamil 12377dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 124*1abe55efSEd Tanous if (retVal == nullptr) 125*1abe55efSEd Tanous { 12677dd8813SKowalski, Kamil return Result::WRONG_TYPE; 12777dd8813SKowalski, Kamil } 12877dd8813SKowalski, Kamil 12977dd8813SKowalski, Kamil // Extract value 13077dd8813SKowalski, Kamil output = *retVal; 13177dd8813SKowalski, Kamil 13277dd8813SKowalski, Kamil return Result::SUCCESS; 13377dd8813SKowalski, Kamil } 13477dd8813SKowalski, Kamil 13577dd8813SKowalski, Kamil Result getUnsigned(const char* fieldName, const nlohmann::json& json, 136*1abe55efSEd Tanous uint64_t& output) 137*1abe55efSEd Tanous { 13877dd8813SKowalski, Kamil // Find field 13977dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 14077dd8813SKowalski, Kamil 14177dd8813SKowalski, Kamil // Verify existence 142*1abe55efSEd Tanous if (fieldIt == json.end()) 143*1abe55efSEd Tanous { 14477dd8813SKowalski, Kamil return Result::NOT_EXIST; 14577dd8813SKowalski, Kamil } 14677dd8813SKowalski, Kamil 14777dd8813SKowalski, Kamil const uint64_t* retVal = fieldIt->get_ptr<const uint64_t*>(); 14877dd8813SKowalski, Kamil 14977dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 150*1abe55efSEd Tanous if (retVal == nullptr) 151*1abe55efSEd Tanous { 15277dd8813SKowalski, Kamil return Result::WRONG_TYPE; 15377dd8813SKowalski, Kamil } 15477dd8813SKowalski, Kamil 15577dd8813SKowalski, Kamil // Extract value 15677dd8813SKowalski, Kamil output = *retVal; 15777dd8813SKowalski, Kamil 15877dd8813SKowalski, Kamil return Result::SUCCESS; 15977dd8813SKowalski, Kamil } 16077dd8813SKowalski, Kamil 161*1abe55efSEd Tanous Result getBool(const char* fieldName, const nlohmann::json& json, bool& output) 162*1abe55efSEd Tanous { 16377dd8813SKowalski, Kamil // Find field 16477dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 16577dd8813SKowalski, Kamil 16677dd8813SKowalski, Kamil // Verify existence 167*1abe55efSEd Tanous if (fieldIt == json.end()) 168*1abe55efSEd Tanous { 16977dd8813SKowalski, Kamil return Result::NOT_EXIST; 17077dd8813SKowalski, Kamil } 17177dd8813SKowalski, Kamil 17277dd8813SKowalski, Kamil const bool* retVal = fieldIt->get_ptr<const bool*>(); 17377dd8813SKowalski, Kamil 17477dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 175*1abe55efSEd Tanous if (retVal == nullptr) 176*1abe55efSEd Tanous { 17777dd8813SKowalski, Kamil return Result::WRONG_TYPE; 17877dd8813SKowalski, Kamil } 17977dd8813SKowalski, Kamil 18077dd8813SKowalski, Kamil // Extract value 18177dd8813SKowalski, Kamil output = *retVal; 18277dd8813SKowalski, Kamil 18377dd8813SKowalski, Kamil return Result::SUCCESS; 18477dd8813SKowalski, Kamil } 18577dd8813SKowalski, Kamil 18677dd8813SKowalski, Kamil Result getDouble(const char* fieldName, const nlohmann::json& json, 187*1abe55efSEd Tanous double& output) 188*1abe55efSEd Tanous { 18977dd8813SKowalski, Kamil // Find field 19077dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 19177dd8813SKowalski, Kamil 19277dd8813SKowalski, Kamil // Verify existence 193*1abe55efSEd Tanous if (fieldIt == json.end()) 194*1abe55efSEd Tanous { 19577dd8813SKowalski, Kamil return Result::NOT_EXIST; 19677dd8813SKowalski, Kamil } 19777dd8813SKowalski, Kamil 19877dd8813SKowalski, Kamil const double* retVal = fieldIt->get_ptr<const double*>(); 19977dd8813SKowalski, Kamil 20077dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 201*1abe55efSEd Tanous if (retVal == nullptr) 202*1abe55efSEd Tanous { 20377dd8813SKowalski, Kamil return Result::WRONG_TYPE; 20477dd8813SKowalski, Kamil } 20577dd8813SKowalski, Kamil 20677dd8813SKowalski, Kamil // Extract value 20777dd8813SKowalski, Kamil output = *retVal; 20877dd8813SKowalski, Kamil 20977dd8813SKowalski, Kamil return Result::SUCCESS; 21077dd8813SKowalski, Kamil } 21177dd8813SKowalski, Kamil 21277dd8813SKowalski, Kamil Result getString(const char* fieldName, const nlohmann::json& json, 21377dd8813SKowalski, Kamil const std::string*& output, uint8_t msgCfgMap, 214*1abe55efSEd Tanous nlohmann::json& msgJson, const std::string&& fieldPath) 215*1abe55efSEd Tanous { 21677dd8813SKowalski, Kamil // Find field 21777dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 21877dd8813SKowalski, Kamil 21977dd8813SKowalski, Kamil // Verify existence 220*1abe55efSEd Tanous if (fieldIt == json.end()) 221*1abe55efSEd Tanous { 222*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 223*1abe55efSEd Tanous { 224*1abe55efSEd Tanous messages::addMessageToJson( 225*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 22677dd8813SKowalski, Kamil } 22777dd8813SKowalski, Kamil 22877dd8813SKowalski, Kamil return Result::NOT_EXIST; 22977dd8813SKowalski, Kamil } 23077dd8813SKowalski, Kamil 23177dd8813SKowalski, Kamil output = fieldIt->get_ptr<const std::string*>(); 23277dd8813SKowalski, Kamil 23377dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 234*1abe55efSEd Tanous if (output == nullptr) 235*1abe55efSEd Tanous { 236*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 237*1abe55efSEd Tanous { 23877dd8813SKowalski, Kamil messages::addMessageToJson( 239*1abe55efSEd Tanous msgJson, 240*1abe55efSEd Tanous messages::propertyValueTypeError(fieldIt->dump(), fieldName), 24177dd8813SKowalski, Kamil fieldPath); 24277dd8813SKowalski, Kamil } 24377dd8813SKowalski, Kamil 24477dd8813SKowalski, Kamil return Result::WRONG_TYPE; 24577dd8813SKowalski, Kamil } 24677dd8813SKowalski, Kamil 24777dd8813SKowalski, Kamil return Result::SUCCESS; 24877dd8813SKowalski, Kamil } 24977dd8813SKowalski, Kamil 25077dd8813SKowalski, Kamil Result getObject(const char* fieldName, const nlohmann::json& json, 25177dd8813SKowalski, Kamil nlohmann::json* output, uint8_t msgCfgMap, 252*1abe55efSEd Tanous nlohmann::json& msgJson, const std::string&& fieldPath) 253*1abe55efSEd Tanous { 25477dd8813SKowalski, Kamil // Verify input pointer 255*1abe55efSEd Tanous if (output == nullptr) 256*1abe55efSEd Tanous { 25777dd8813SKowalski, Kamil return Result::NULL_POINTER; 25877dd8813SKowalski, Kamil } 25977dd8813SKowalski, Kamil 26077dd8813SKowalski, Kamil // Find field 26177dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 26277dd8813SKowalski, Kamil 26377dd8813SKowalski, Kamil // Verify existence 264*1abe55efSEd Tanous if (fieldIt == json.end()) 265*1abe55efSEd Tanous { 266*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 267*1abe55efSEd Tanous { 268*1abe55efSEd Tanous messages::addMessageToJson( 269*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 27077dd8813SKowalski, Kamil } 27177dd8813SKowalski, Kamil 27277dd8813SKowalski, Kamil return Result::NOT_EXIST; 27377dd8813SKowalski, Kamil } 27477dd8813SKowalski, Kamil 27577dd8813SKowalski, Kamil // Verify type 276*1abe55efSEd Tanous if (!fieldIt->is_object()) 277*1abe55efSEd Tanous { 278*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 279*1abe55efSEd Tanous { 28077dd8813SKowalski, Kamil messages::addMessageToJson( 281*1abe55efSEd Tanous msgJson, 282*1abe55efSEd Tanous 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 getArray(const char* fieldName, const nlohmann::json& json, 29677dd8813SKowalski, Kamil nlohmann::json* output, uint8_t msgCfgMap, 297*1abe55efSEd Tanous nlohmann::json& msgJson, const std::string&& fieldPath) 298*1abe55efSEd Tanous { 29977dd8813SKowalski, Kamil // Verify input pointer 300*1abe55efSEd Tanous if (output == nullptr) 301*1abe55efSEd Tanous { 30277dd8813SKowalski, Kamil return Result::NULL_POINTER; 30377dd8813SKowalski, Kamil } 30477dd8813SKowalski, Kamil 30577dd8813SKowalski, Kamil // Find field 30677dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 30777dd8813SKowalski, Kamil 30877dd8813SKowalski, Kamil // Verify existence 309*1abe55efSEd Tanous if (fieldIt == json.end()) 310*1abe55efSEd Tanous { 311*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 312*1abe55efSEd Tanous { 313*1abe55efSEd Tanous messages::addMessageToJson( 314*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 31577dd8813SKowalski, Kamil } 31677dd8813SKowalski, Kamil 31777dd8813SKowalski, Kamil return Result::NOT_EXIST; 31877dd8813SKowalski, Kamil } 31977dd8813SKowalski, Kamil 32077dd8813SKowalski, Kamil // Verify type 321*1abe55efSEd Tanous if (!fieldIt->is_array()) 322*1abe55efSEd Tanous { 323*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 324*1abe55efSEd Tanous { 32577dd8813SKowalski, Kamil messages::addMessageToJson( 326*1abe55efSEd Tanous msgJson, 327*1abe55efSEd Tanous messages::propertyValueTypeError(fieldIt->dump(), fieldName), 32877dd8813SKowalski, Kamil fieldPath); 32977dd8813SKowalski, Kamil } 33077dd8813SKowalski, Kamil 33177dd8813SKowalski, Kamil return Result::WRONG_TYPE; 33277dd8813SKowalski, Kamil } 33377dd8813SKowalski, Kamil 33477dd8813SKowalski, Kamil // Extract value 33577dd8813SKowalski, Kamil *output = *fieldIt; 33677dd8813SKowalski, Kamil 33777dd8813SKowalski, Kamil return Result::SUCCESS; 33877dd8813SKowalski, Kamil } 33977dd8813SKowalski, Kamil 34077dd8813SKowalski, Kamil Result getInt(const char* fieldName, const nlohmann::json& json, 34177dd8813SKowalski, Kamil int64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 342*1abe55efSEd Tanous const std::string&& fieldPath) 343*1abe55efSEd Tanous { 34477dd8813SKowalski, Kamil // Find field 34577dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 34677dd8813SKowalski, Kamil 34777dd8813SKowalski, Kamil // Verify existence 348*1abe55efSEd Tanous if (fieldIt == json.end()) 349*1abe55efSEd Tanous { 350*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 351*1abe55efSEd Tanous { 352*1abe55efSEd Tanous messages::addMessageToJson( 353*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 35477dd8813SKowalski, Kamil } 35577dd8813SKowalski, Kamil 35677dd8813SKowalski, Kamil return Result::NOT_EXIST; 35777dd8813SKowalski, Kamil } 35877dd8813SKowalski, Kamil 35977dd8813SKowalski, Kamil const int64_t* retVal = fieldIt->get_ptr<const int64_t*>(); 36077dd8813SKowalski, Kamil 36177dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 362*1abe55efSEd Tanous if (retVal == nullptr) 363*1abe55efSEd Tanous { 364*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 365*1abe55efSEd Tanous { 36677dd8813SKowalski, Kamil messages::addMessageToJson( 367*1abe55efSEd Tanous msgJson, 368*1abe55efSEd Tanous messages::propertyValueTypeError(fieldIt->dump(), fieldName), 36977dd8813SKowalski, Kamil fieldPath); 37077dd8813SKowalski, Kamil } 37177dd8813SKowalski, Kamil 37277dd8813SKowalski, Kamil return Result::WRONG_TYPE; 37377dd8813SKowalski, Kamil } 37477dd8813SKowalski, Kamil 37577dd8813SKowalski, Kamil // Extract value 37677dd8813SKowalski, Kamil output = *retVal; 37777dd8813SKowalski, Kamil 37877dd8813SKowalski, Kamil return Result::SUCCESS; 37977dd8813SKowalski, Kamil } 38077dd8813SKowalski, Kamil 38177dd8813SKowalski, Kamil Result getUnsigned(const char* fieldName, const nlohmann::json& json, 38277dd8813SKowalski, Kamil uint64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 383*1abe55efSEd Tanous const std::string&& fieldPath) 384*1abe55efSEd Tanous { 38577dd8813SKowalski, Kamil // Find field 38677dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 38777dd8813SKowalski, Kamil 38877dd8813SKowalski, Kamil // Verify existence 389*1abe55efSEd Tanous if (fieldIt == json.end()) 390*1abe55efSEd Tanous { 391*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 392*1abe55efSEd Tanous { 393*1abe55efSEd Tanous messages::addMessageToJson( 394*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 39577dd8813SKowalski, Kamil } 39677dd8813SKowalski, Kamil 39777dd8813SKowalski, Kamil return Result::NOT_EXIST; 39877dd8813SKowalski, Kamil } 39977dd8813SKowalski, Kamil 40077dd8813SKowalski, Kamil const uint64_t* retVal = fieldIt->get_ptr<const uint64_t*>(); 40177dd8813SKowalski, Kamil 40277dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 403*1abe55efSEd Tanous if (retVal == nullptr) 404*1abe55efSEd Tanous { 405*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 406*1abe55efSEd Tanous { 40777dd8813SKowalski, Kamil messages::addMessageToJson( 408*1abe55efSEd Tanous msgJson, 409*1abe55efSEd Tanous messages::propertyValueTypeError(fieldIt->dump(), fieldName), 41077dd8813SKowalski, Kamil fieldPath); 41177dd8813SKowalski, Kamil } 41277dd8813SKowalski, Kamil 41377dd8813SKowalski, Kamil return Result::WRONG_TYPE; 41477dd8813SKowalski, Kamil } 41577dd8813SKowalski, Kamil 41677dd8813SKowalski, Kamil // Extract value 41777dd8813SKowalski, Kamil output = *retVal; 41877dd8813SKowalski, Kamil 41977dd8813SKowalski, Kamil return Result::SUCCESS; 42077dd8813SKowalski, Kamil } 42177dd8813SKowalski, Kamil 42277dd8813SKowalski, Kamil Result getBool(const char* fieldName, const nlohmann::json& json, bool& output, 42377dd8813SKowalski, Kamil uint8_t msgCfgMap, nlohmann::json& msgJson, 424*1abe55efSEd Tanous const std::string&& fieldPath) 425*1abe55efSEd Tanous { 42677dd8813SKowalski, Kamil // Find field 42777dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 42877dd8813SKowalski, Kamil 42977dd8813SKowalski, Kamil // Verify existence 430*1abe55efSEd Tanous if (fieldIt == json.end()) 431*1abe55efSEd Tanous { 432*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 433*1abe55efSEd Tanous { 434*1abe55efSEd Tanous messages::addMessageToJson( 435*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 43677dd8813SKowalski, Kamil } 43777dd8813SKowalski, Kamil 43877dd8813SKowalski, Kamil return Result::NOT_EXIST; 43977dd8813SKowalski, Kamil } 44077dd8813SKowalski, Kamil 44177dd8813SKowalski, Kamil const bool* retVal = fieldIt->get_ptr<const bool*>(); 44277dd8813SKowalski, Kamil 44377dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 444*1abe55efSEd Tanous if (retVal == nullptr) 445*1abe55efSEd Tanous { 446*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 447*1abe55efSEd Tanous { 44877dd8813SKowalski, Kamil messages::addMessageToJson( 449*1abe55efSEd Tanous msgJson, 450*1abe55efSEd Tanous messages::propertyValueTypeError(fieldIt->dump(), fieldName), 45177dd8813SKowalski, Kamil fieldPath); 45277dd8813SKowalski, Kamil } 45377dd8813SKowalski, Kamil 45477dd8813SKowalski, Kamil return Result::WRONG_TYPE; 45577dd8813SKowalski, Kamil } 45677dd8813SKowalski, Kamil 45777dd8813SKowalski, Kamil // Extract value 45877dd8813SKowalski, Kamil output = *retVal; 45977dd8813SKowalski, Kamil 46077dd8813SKowalski, Kamil return Result::SUCCESS; 46177dd8813SKowalski, Kamil } 46277dd8813SKowalski, Kamil 46377dd8813SKowalski, Kamil Result getDouble(const char* fieldName, const nlohmann::json& json, 46477dd8813SKowalski, Kamil double& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 465*1abe55efSEd Tanous const std::string&& fieldPath) 466*1abe55efSEd Tanous { 46777dd8813SKowalski, Kamil // Find field 46877dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 46977dd8813SKowalski, Kamil 47077dd8813SKowalski, Kamil // Verify existence 471*1abe55efSEd Tanous if (fieldIt == json.end()) 472*1abe55efSEd Tanous { 473*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) 474*1abe55efSEd Tanous { 475*1abe55efSEd Tanous messages::addMessageToJson( 476*1abe55efSEd Tanous msgJson, messages::propertyMissing(fieldName), fieldPath); 47777dd8813SKowalski, Kamil } 47877dd8813SKowalski, Kamil 47977dd8813SKowalski, Kamil return Result::NOT_EXIST; 48077dd8813SKowalski, Kamil } 48177dd8813SKowalski, Kamil 48277dd8813SKowalski, Kamil const double* retVal = fieldIt->get_ptr<const double*>(); 48377dd8813SKowalski, Kamil 48477dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 485*1abe55efSEd Tanous if (retVal == nullptr) 486*1abe55efSEd Tanous { 487*1abe55efSEd Tanous if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) 488*1abe55efSEd Tanous { 48977dd8813SKowalski, Kamil messages::addMessageToJson( 490*1abe55efSEd Tanous msgJson, 491*1abe55efSEd Tanous messages::propertyValueTypeError(fieldIt->dump(), fieldName), 49277dd8813SKowalski, Kamil fieldPath); 49377dd8813SKowalski, Kamil } 49477dd8813SKowalski, Kamil 49577dd8813SKowalski, Kamil return Result::WRONG_TYPE; 49677dd8813SKowalski, Kamil } 49777dd8813SKowalski, Kamil 49877dd8813SKowalski, Kamil // Extract value 49977dd8813SKowalski, Kamil output = *retVal; 50077dd8813SKowalski, Kamil 50177dd8813SKowalski, Kamil return Result::SUCCESS; 50277dd8813SKowalski, Kamil } 50377dd8813SKowalski, Kamil 50455c7b7a2SEd Tanous bool processJsonFromRequest(crow::Response& res, const crow::Request& req, 505*1abe55efSEd Tanous nlohmann::json& reqJson) 506*1abe55efSEd Tanous { 50777dd8813SKowalski, Kamil reqJson = nlohmann::json::parse(req.body, nullptr, false); 50877dd8813SKowalski, Kamil 509*1abe55efSEd Tanous if (reqJson.is_discarded()) 510*1abe55efSEd Tanous { 511*1abe55efSEd Tanous messages::addMessageToErrorJson(res.jsonValue, 512*1abe55efSEd Tanous messages::malformedJSON()); 51377dd8813SKowalski, Kamil 514e0d918bcSEd Tanous res.result(boost::beast::http::status::bad_request); 51577dd8813SKowalski, Kamil res.end(); 51677dd8813SKowalski, Kamil 51777dd8813SKowalski, Kamil return false; 51877dd8813SKowalski, Kamil } 51977dd8813SKowalski, Kamil 52077dd8813SKowalski, Kamil return true; 52177dd8813SKowalski, Kamil } 52277dd8813SKowalski, Kamil 52377dd8813SKowalski, Kamil } // namespace json_util 52477dd8813SKowalski, Kamil 52577dd8813SKowalski, Kamil } // namespace redfish 526