1*77dd8813SKowalski, Kamil /* 2*77dd8813SKowalski, Kamil // Copyright (c) 2018 Intel Corporation 3*77dd8813SKowalski, Kamil // 4*77dd8813SKowalski, Kamil // Licensed under the Apache License, Version 2.0 (the "License"); 5*77dd8813SKowalski, Kamil // you may not use this file except in compliance with the License. 6*77dd8813SKowalski, Kamil // You may obtain a copy of the License at 7*77dd8813SKowalski, Kamil // 8*77dd8813SKowalski, Kamil // http://www.apache.org/licenses/LICENSE-2.0 9*77dd8813SKowalski, Kamil // 10*77dd8813SKowalski, Kamil // Unless required by applicable law or agreed to in writing, software 11*77dd8813SKowalski, Kamil // distributed under the License is distributed on an "AS IS" BASIS, 12*77dd8813SKowalski, Kamil // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*77dd8813SKowalski, Kamil // See the License for the specific language governing permissions and 14*77dd8813SKowalski, Kamil // limitations under the License. 15*77dd8813SKowalski, Kamil */ 16*77dd8813SKowalski, Kamil #include "utils/json_utils.hpp" 17*77dd8813SKowalski, Kamil #include <error_messages.hpp> 18*77dd8813SKowalski, Kamil #include <crow/http_codes.h> 19*77dd8813SKowalski, Kamil 20*77dd8813SKowalski, Kamil namespace redfish { 21*77dd8813SKowalski, Kamil 22*77dd8813SKowalski, Kamil namespace json_util { 23*77dd8813SKowalski, Kamil 24*77dd8813SKowalski, Kamil Result getString(const char* fieldName, const nlohmann::json& json, 25*77dd8813SKowalski, Kamil const std::string*& output) { 26*77dd8813SKowalski, Kamil // Find field 27*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 28*77dd8813SKowalski, Kamil 29*77dd8813SKowalski, Kamil // Verify existence 30*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 31*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 32*77dd8813SKowalski, Kamil } 33*77dd8813SKowalski, Kamil 34*77dd8813SKowalski, Kamil output = fieldIt->get_ptr<const std::string*>(); 35*77dd8813SKowalski, Kamil 36*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 37*77dd8813SKowalski, Kamil if (output == nullptr) { 38*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 39*77dd8813SKowalski, Kamil } 40*77dd8813SKowalski, Kamil 41*77dd8813SKowalski, Kamil return Result::SUCCESS; 42*77dd8813SKowalski, Kamil } 43*77dd8813SKowalski, Kamil 44*77dd8813SKowalski, Kamil Result getObject(const char* fieldName, const nlohmann::json& json, 45*77dd8813SKowalski, Kamil nlohmann::json* output) { 46*77dd8813SKowalski, Kamil // Verify input pointer 47*77dd8813SKowalski, Kamil if (output == nullptr) { 48*77dd8813SKowalski, Kamil return Result::NULL_POINTER; 49*77dd8813SKowalski, Kamil } 50*77dd8813SKowalski, Kamil 51*77dd8813SKowalski, Kamil // Find field 52*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 53*77dd8813SKowalski, Kamil 54*77dd8813SKowalski, Kamil // Verify existence 55*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 56*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 57*77dd8813SKowalski, Kamil } 58*77dd8813SKowalski, Kamil 59*77dd8813SKowalski, Kamil // Verify type 60*77dd8813SKowalski, Kamil if (!fieldIt->is_object()) { 61*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 62*77dd8813SKowalski, Kamil } 63*77dd8813SKowalski, Kamil 64*77dd8813SKowalski, Kamil // Extract value 65*77dd8813SKowalski, Kamil *output = *fieldIt; 66*77dd8813SKowalski, Kamil 67*77dd8813SKowalski, Kamil return Result::SUCCESS; 68*77dd8813SKowalski, Kamil } 69*77dd8813SKowalski, Kamil 70*77dd8813SKowalski, Kamil Result getArray(const char* fieldName, const nlohmann::json& json, 71*77dd8813SKowalski, Kamil nlohmann::json* output) { 72*77dd8813SKowalski, Kamil // Verify input pointer 73*77dd8813SKowalski, Kamil if (output == nullptr) { 74*77dd8813SKowalski, Kamil return Result::NULL_POINTER; 75*77dd8813SKowalski, Kamil } 76*77dd8813SKowalski, Kamil 77*77dd8813SKowalski, Kamil // Find field 78*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 79*77dd8813SKowalski, Kamil 80*77dd8813SKowalski, Kamil // Verify existence 81*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 82*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 83*77dd8813SKowalski, Kamil } 84*77dd8813SKowalski, Kamil 85*77dd8813SKowalski, Kamil // Verify type 86*77dd8813SKowalski, Kamil if (!fieldIt->is_array()) { 87*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 88*77dd8813SKowalski, Kamil } 89*77dd8813SKowalski, Kamil 90*77dd8813SKowalski, Kamil // Extract value 91*77dd8813SKowalski, Kamil *output = *fieldIt; 92*77dd8813SKowalski, Kamil 93*77dd8813SKowalski, Kamil return Result::SUCCESS; 94*77dd8813SKowalski, Kamil } 95*77dd8813SKowalski, Kamil 96*77dd8813SKowalski, Kamil Result getInt(const char* fieldName, const nlohmann::json& json, 97*77dd8813SKowalski, Kamil int64_t& output) { 98*77dd8813SKowalski, Kamil // Find field 99*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 100*77dd8813SKowalski, Kamil 101*77dd8813SKowalski, Kamil // Verify existence 102*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 103*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 104*77dd8813SKowalski, Kamil } 105*77dd8813SKowalski, Kamil 106*77dd8813SKowalski, Kamil const int64_t* retVal = fieldIt->get_ptr<const int64_t*>(); 107*77dd8813SKowalski, Kamil 108*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 109*77dd8813SKowalski, Kamil if (retVal == nullptr) { 110*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 111*77dd8813SKowalski, Kamil } 112*77dd8813SKowalski, Kamil 113*77dd8813SKowalski, Kamil // Extract value 114*77dd8813SKowalski, Kamil output = *retVal; 115*77dd8813SKowalski, Kamil 116*77dd8813SKowalski, Kamil return Result::SUCCESS; 117*77dd8813SKowalski, Kamil } 118*77dd8813SKowalski, Kamil 119*77dd8813SKowalski, Kamil Result getUnsigned(const char* fieldName, const nlohmann::json& json, 120*77dd8813SKowalski, Kamil uint64_t& output) { 121*77dd8813SKowalski, Kamil // Find field 122*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 123*77dd8813SKowalski, Kamil 124*77dd8813SKowalski, Kamil // Verify existence 125*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 126*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 127*77dd8813SKowalski, Kamil } 128*77dd8813SKowalski, Kamil 129*77dd8813SKowalski, Kamil const uint64_t* retVal = fieldIt->get_ptr<const uint64_t*>(); 130*77dd8813SKowalski, Kamil 131*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 132*77dd8813SKowalski, Kamil if (retVal == nullptr) { 133*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 134*77dd8813SKowalski, Kamil } 135*77dd8813SKowalski, Kamil 136*77dd8813SKowalski, Kamil // Extract value 137*77dd8813SKowalski, Kamil output = *retVal; 138*77dd8813SKowalski, Kamil 139*77dd8813SKowalski, Kamil return Result::SUCCESS; 140*77dd8813SKowalski, Kamil } 141*77dd8813SKowalski, Kamil 142*77dd8813SKowalski, Kamil Result getBool(const char* fieldName, const nlohmann::json& json, 143*77dd8813SKowalski, Kamil bool& output) { 144*77dd8813SKowalski, Kamil // Find field 145*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 146*77dd8813SKowalski, Kamil 147*77dd8813SKowalski, Kamil // Verify existence 148*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 149*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 150*77dd8813SKowalski, Kamil } 151*77dd8813SKowalski, Kamil 152*77dd8813SKowalski, Kamil const bool* retVal = fieldIt->get_ptr<const bool*>(); 153*77dd8813SKowalski, Kamil 154*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 155*77dd8813SKowalski, Kamil if (retVal == nullptr) { 156*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 157*77dd8813SKowalski, Kamil } 158*77dd8813SKowalski, Kamil 159*77dd8813SKowalski, Kamil // Extract value 160*77dd8813SKowalski, Kamil output = *retVal; 161*77dd8813SKowalski, Kamil 162*77dd8813SKowalski, Kamil return Result::SUCCESS; 163*77dd8813SKowalski, Kamil } 164*77dd8813SKowalski, Kamil 165*77dd8813SKowalski, Kamil Result getDouble(const char* fieldName, const nlohmann::json& json, 166*77dd8813SKowalski, Kamil double& output) { 167*77dd8813SKowalski, Kamil // Find field 168*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 169*77dd8813SKowalski, Kamil 170*77dd8813SKowalski, Kamil // Verify existence 171*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 172*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 173*77dd8813SKowalski, Kamil } 174*77dd8813SKowalski, Kamil 175*77dd8813SKowalski, Kamil const double* retVal = fieldIt->get_ptr<const double*>(); 176*77dd8813SKowalski, Kamil 177*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 178*77dd8813SKowalski, Kamil if (retVal == nullptr) { 179*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 180*77dd8813SKowalski, Kamil } 181*77dd8813SKowalski, Kamil 182*77dd8813SKowalski, Kamil // Extract value 183*77dd8813SKowalski, Kamil output = *retVal; 184*77dd8813SKowalski, Kamil 185*77dd8813SKowalski, Kamil return Result::SUCCESS; 186*77dd8813SKowalski, Kamil } 187*77dd8813SKowalski, Kamil 188*77dd8813SKowalski, Kamil Result getString(const char* fieldName, const nlohmann::json& json, 189*77dd8813SKowalski, Kamil const std::string*& output, uint8_t msgCfgMap, 190*77dd8813SKowalski, Kamil nlohmann::json& msgJson, const std::string&& fieldPath) { 191*77dd8813SKowalski, Kamil // Find field 192*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 193*77dd8813SKowalski, Kamil 194*77dd8813SKowalski, Kamil // Verify existence 195*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 196*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 197*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 198*77dd8813SKowalski, Kamil fieldPath); 199*77dd8813SKowalski, Kamil } 200*77dd8813SKowalski, Kamil 201*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 202*77dd8813SKowalski, Kamil } 203*77dd8813SKowalski, Kamil 204*77dd8813SKowalski, Kamil output = fieldIt->get_ptr<const std::string*>(); 205*77dd8813SKowalski, Kamil 206*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 207*77dd8813SKowalski, Kamil if (output == nullptr) { 208*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 209*77dd8813SKowalski, Kamil messages::addMessageToJson( 210*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 211*77dd8813SKowalski, Kamil fieldPath); 212*77dd8813SKowalski, Kamil } 213*77dd8813SKowalski, Kamil 214*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 215*77dd8813SKowalski, Kamil } 216*77dd8813SKowalski, Kamil 217*77dd8813SKowalski, Kamil return Result::SUCCESS; 218*77dd8813SKowalski, Kamil } 219*77dd8813SKowalski, Kamil 220*77dd8813SKowalski, Kamil Result getObject(const char* fieldName, const nlohmann::json& json, 221*77dd8813SKowalski, Kamil nlohmann::json* output, uint8_t msgCfgMap, 222*77dd8813SKowalski, Kamil nlohmann::json& msgJson, const std::string&& fieldPath) { 223*77dd8813SKowalski, Kamil // Verify input pointer 224*77dd8813SKowalski, Kamil if (output == nullptr) { 225*77dd8813SKowalski, Kamil return Result::NULL_POINTER; 226*77dd8813SKowalski, Kamil } 227*77dd8813SKowalski, Kamil 228*77dd8813SKowalski, Kamil // Find field 229*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 230*77dd8813SKowalski, Kamil 231*77dd8813SKowalski, Kamil // Verify existence 232*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 233*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 234*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 235*77dd8813SKowalski, Kamil fieldPath); 236*77dd8813SKowalski, Kamil } 237*77dd8813SKowalski, Kamil 238*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 239*77dd8813SKowalski, Kamil } 240*77dd8813SKowalski, Kamil 241*77dd8813SKowalski, Kamil // Verify type 242*77dd8813SKowalski, Kamil if (!fieldIt->is_object()) { 243*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 244*77dd8813SKowalski, Kamil messages::addMessageToJson( 245*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 246*77dd8813SKowalski, Kamil fieldPath); 247*77dd8813SKowalski, Kamil } 248*77dd8813SKowalski, Kamil 249*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 250*77dd8813SKowalski, Kamil } 251*77dd8813SKowalski, Kamil 252*77dd8813SKowalski, Kamil // Extract value 253*77dd8813SKowalski, Kamil *output = *fieldIt; 254*77dd8813SKowalski, Kamil 255*77dd8813SKowalski, Kamil return Result::SUCCESS; 256*77dd8813SKowalski, Kamil } 257*77dd8813SKowalski, Kamil 258*77dd8813SKowalski, Kamil Result getArray(const char* fieldName, const nlohmann::json& json, 259*77dd8813SKowalski, Kamil nlohmann::json* output, uint8_t msgCfgMap, 260*77dd8813SKowalski, Kamil nlohmann::json& msgJson, const std::string&& fieldPath) { 261*77dd8813SKowalski, Kamil // Verify input pointer 262*77dd8813SKowalski, Kamil if (output == nullptr) { 263*77dd8813SKowalski, Kamil return Result::NULL_POINTER; 264*77dd8813SKowalski, Kamil } 265*77dd8813SKowalski, Kamil 266*77dd8813SKowalski, Kamil // Find field 267*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 268*77dd8813SKowalski, Kamil 269*77dd8813SKowalski, Kamil // Verify existence 270*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 271*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 272*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 273*77dd8813SKowalski, Kamil fieldPath); 274*77dd8813SKowalski, Kamil } 275*77dd8813SKowalski, Kamil 276*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 277*77dd8813SKowalski, Kamil } 278*77dd8813SKowalski, Kamil 279*77dd8813SKowalski, Kamil // Verify type 280*77dd8813SKowalski, Kamil if (!fieldIt->is_array()) { 281*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 282*77dd8813SKowalski, Kamil messages::addMessageToJson( 283*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 284*77dd8813SKowalski, Kamil fieldPath); 285*77dd8813SKowalski, Kamil } 286*77dd8813SKowalski, Kamil 287*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 288*77dd8813SKowalski, Kamil } 289*77dd8813SKowalski, Kamil 290*77dd8813SKowalski, Kamil // Extract value 291*77dd8813SKowalski, Kamil *output = *fieldIt; 292*77dd8813SKowalski, Kamil 293*77dd8813SKowalski, Kamil return Result::SUCCESS; 294*77dd8813SKowalski, Kamil } 295*77dd8813SKowalski, Kamil 296*77dd8813SKowalski, Kamil Result getInt(const char* fieldName, const nlohmann::json& json, 297*77dd8813SKowalski, Kamil int64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 298*77dd8813SKowalski, Kamil const std::string&& fieldPath) { 299*77dd8813SKowalski, Kamil // Find field 300*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 301*77dd8813SKowalski, Kamil 302*77dd8813SKowalski, Kamil // Verify existence 303*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 304*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 305*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 306*77dd8813SKowalski, Kamil fieldPath); 307*77dd8813SKowalski, Kamil } 308*77dd8813SKowalski, Kamil 309*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 310*77dd8813SKowalski, Kamil } 311*77dd8813SKowalski, Kamil 312*77dd8813SKowalski, Kamil const int64_t* retVal = fieldIt->get_ptr<const int64_t*>(); 313*77dd8813SKowalski, Kamil 314*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 315*77dd8813SKowalski, Kamil if (retVal == nullptr) { 316*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 317*77dd8813SKowalski, Kamil messages::addMessageToJson( 318*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 319*77dd8813SKowalski, Kamil fieldPath); 320*77dd8813SKowalski, Kamil } 321*77dd8813SKowalski, Kamil 322*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 323*77dd8813SKowalski, Kamil } 324*77dd8813SKowalski, Kamil 325*77dd8813SKowalski, Kamil // Extract value 326*77dd8813SKowalski, Kamil output = *retVal; 327*77dd8813SKowalski, Kamil 328*77dd8813SKowalski, Kamil return Result::SUCCESS; 329*77dd8813SKowalski, Kamil } 330*77dd8813SKowalski, Kamil 331*77dd8813SKowalski, Kamil Result getUnsigned(const char* fieldName, const nlohmann::json& json, 332*77dd8813SKowalski, Kamil uint64_t& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 333*77dd8813SKowalski, Kamil const std::string&& fieldPath) { 334*77dd8813SKowalski, Kamil // Find field 335*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 336*77dd8813SKowalski, Kamil 337*77dd8813SKowalski, Kamil // Verify existence 338*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 339*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 340*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 341*77dd8813SKowalski, Kamil fieldPath); 342*77dd8813SKowalski, Kamil } 343*77dd8813SKowalski, Kamil 344*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 345*77dd8813SKowalski, Kamil } 346*77dd8813SKowalski, Kamil 347*77dd8813SKowalski, Kamil const uint64_t* retVal = fieldIt->get_ptr<const uint64_t*>(); 348*77dd8813SKowalski, Kamil 349*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 350*77dd8813SKowalski, Kamil if (retVal == nullptr) { 351*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 352*77dd8813SKowalski, Kamil messages::addMessageToJson( 353*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 354*77dd8813SKowalski, Kamil fieldPath); 355*77dd8813SKowalski, Kamil } 356*77dd8813SKowalski, Kamil 357*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 358*77dd8813SKowalski, Kamil } 359*77dd8813SKowalski, Kamil 360*77dd8813SKowalski, Kamil // Extract value 361*77dd8813SKowalski, Kamil output = *retVal; 362*77dd8813SKowalski, Kamil 363*77dd8813SKowalski, Kamil return Result::SUCCESS; 364*77dd8813SKowalski, Kamil } 365*77dd8813SKowalski, Kamil 366*77dd8813SKowalski, Kamil Result getBool(const char* fieldName, const nlohmann::json& json, bool& output, 367*77dd8813SKowalski, Kamil uint8_t msgCfgMap, nlohmann::json& msgJson, 368*77dd8813SKowalski, Kamil const std::string&& fieldPath) { 369*77dd8813SKowalski, Kamil // Find field 370*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 371*77dd8813SKowalski, Kamil 372*77dd8813SKowalski, Kamil // Verify existence 373*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 374*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 375*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 376*77dd8813SKowalski, Kamil fieldPath); 377*77dd8813SKowalski, Kamil } 378*77dd8813SKowalski, Kamil 379*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 380*77dd8813SKowalski, Kamil } 381*77dd8813SKowalski, Kamil 382*77dd8813SKowalski, Kamil const bool* retVal = fieldIt->get_ptr<const bool*>(); 383*77dd8813SKowalski, Kamil 384*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 385*77dd8813SKowalski, Kamil if (retVal == nullptr) { 386*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 387*77dd8813SKowalski, Kamil messages::addMessageToJson( 388*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 389*77dd8813SKowalski, Kamil fieldPath); 390*77dd8813SKowalski, Kamil } 391*77dd8813SKowalski, Kamil 392*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 393*77dd8813SKowalski, Kamil } 394*77dd8813SKowalski, Kamil 395*77dd8813SKowalski, Kamil // Extract value 396*77dd8813SKowalski, Kamil output = *retVal; 397*77dd8813SKowalski, Kamil 398*77dd8813SKowalski, Kamil return Result::SUCCESS; 399*77dd8813SKowalski, Kamil } 400*77dd8813SKowalski, Kamil 401*77dd8813SKowalski, Kamil Result getDouble(const char* fieldName, const nlohmann::json& json, 402*77dd8813SKowalski, Kamil double& output, uint8_t msgCfgMap, nlohmann::json& msgJson, 403*77dd8813SKowalski, Kamil const std::string&& fieldPath) { 404*77dd8813SKowalski, Kamil // Find field 405*77dd8813SKowalski, Kamil auto fieldIt = json.find(fieldName); 406*77dd8813SKowalski, Kamil 407*77dd8813SKowalski, Kamil // Verify existence 408*77dd8813SKowalski, Kamil if (fieldIt == json.end()) { 409*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::MISSING)) { 410*77dd8813SKowalski, Kamil messages::addMessageToJson(msgJson, messages::propertyMissing(fieldName), 411*77dd8813SKowalski, Kamil fieldPath); 412*77dd8813SKowalski, Kamil } 413*77dd8813SKowalski, Kamil 414*77dd8813SKowalski, Kamil return Result::NOT_EXIST; 415*77dd8813SKowalski, Kamil } 416*77dd8813SKowalski, Kamil 417*77dd8813SKowalski, Kamil const double* retVal = fieldIt->get_ptr<const double*>(); 418*77dd8813SKowalski, Kamil 419*77dd8813SKowalski, Kamil // Verify type - we know that it exists, so nullptr means wrong type 420*77dd8813SKowalski, Kamil if (retVal == nullptr) { 421*77dd8813SKowalski, Kamil if (msgCfgMap & static_cast<int>(MessageSetting::TYPE_ERROR)) { 422*77dd8813SKowalski, Kamil messages::addMessageToJson( 423*77dd8813SKowalski, Kamil msgJson, messages::propertyValueTypeError(fieldIt->dump(), fieldName), 424*77dd8813SKowalski, Kamil fieldPath); 425*77dd8813SKowalski, Kamil } 426*77dd8813SKowalski, Kamil 427*77dd8813SKowalski, Kamil return Result::WRONG_TYPE; 428*77dd8813SKowalski, Kamil } 429*77dd8813SKowalski, Kamil 430*77dd8813SKowalski, Kamil // Extract value 431*77dd8813SKowalski, Kamil output = *retVal; 432*77dd8813SKowalski, Kamil 433*77dd8813SKowalski, Kamil return Result::SUCCESS; 434*77dd8813SKowalski, Kamil } 435*77dd8813SKowalski, Kamil 436*77dd8813SKowalski, Kamil bool processJsonFromRequest(crow::response& res, const crow::request& req, 437*77dd8813SKowalski, Kamil nlohmann::json& reqJson) { 438*77dd8813SKowalski, Kamil reqJson = nlohmann::json::parse(req.body, nullptr, false); 439*77dd8813SKowalski, Kamil 440*77dd8813SKowalski, Kamil if (reqJson.is_discarded()) { 441*77dd8813SKowalski, Kamil messages::addMessageToErrorJson(res.json_value, messages::malformedJSON()); 442*77dd8813SKowalski, Kamil 443*77dd8813SKowalski, Kamil res.code = static_cast<int>(HttpRespCode::BAD_REQUEST); 444*77dd8813SKowalski, Kamil res.end(); 445*77dd8813SKowalski, Kamil 446*77dd8813SKowalski, Kamil return false; 447*77dd8813SKowalski, Kamil } 448*77dd8813SKowalski, Kamil 449*77dd8813SKowalski, Kamil return true; 450*77dd8813SKowalski, Kamil } 451*77dd8813SKowalski, Kamil 452*77dd8813SKowalski, Kamil } // namespace json_util 453*77dd8813SKowalski, Kamil 454*77dd8813SKowalski, Kamil } // namespace redfish 455