170304cb5SJason M. Bills /* 270304cb5SJason M. Bills // Copyright (c) 2019 Intel Corporation 370304cb5SJason M. Bills // 470304cb5SJason M. Bills // Licensed under the Apache License, Version 2.0 (the "License"); 570304cb5SJason M. Bills // you may not use this file except in compliance with the License. 670304cb5SJason M. Bills // You may obtain a copy of the License at 770304cb5SJason M. Bills // 870304cb5SJason M. Bills // http://www.apache.org/licenses/LICENSE-2.0 970304cb5SJason M. Bills // 1070304cb5SJason M. Bills // Unless required by applicable law or agreed to in writing, software 1170304cb5SJason M. Bills // distributed under the License is distributed on an "AS IS" BASIS, 1270304cb5SJason M. Bills // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1370304cb5SJason M. Bills // See the License for the specific language governing permissions and 1470304cb5SJason M. Bills // limitations under the License. 1570304cb5SJason M. Bills */ 1670304cb5SJason M. Bills #pragma once 17*c5ba4c27SEd Tanous 18*c5ba4c27SEd Tanous #include <span> 19*c5ba4c27SEd Tanous #include <string> 20*c5ba4c27SEd Tanous #include <string_view> 21*c5ba4c27SEd Tanous 2270304cb5SJason M. Bills namespace redfish::message_registries 2370304cb5SJason M. Bills { 24351d3063SJason M. Bills struct Header 25351d3063SJason M. Bills { 26351d3063SJason M. Bills const char* copyright; 27351d3063SJason M. Bills const char* type; 28351d3063SJason M. Bills const char* id; 29351d3063SJason M. Bills const char* name; 30351d3063SJason M. Bills const char* language; 31351d3063SJason M. Bills const char* description; 32351d3063SJason M. Bills const char* registryPrefix; 33351d3063SJason M. Bills const char* registryVersion; 34351d3063SJason M. Bills const char* owningEntity; 35351d3063SJason M. Bills }; 3670304cb5SJason M. Bills 3770304cb5SJason M. Bills struct Message 3870304cb5SJason M. Bills { 3970304cb5SJason M. Bills const char* description; 4070304cb5SJason M. Bills const char* message; 4170304cb5SJason M. Bills const char* severity; 42e7808c93SGunnar Mills const char* messageSeverity; 43271584abSEd Tanous const size_t numberOfArgs; 4470304cb5SJason M. Bills std::array<const char*, 5> paramTypes; 4570304cb5SJason M. Bills const char* resolution; 4670304cb5SJason M. Bills }; 4770304cb5SJason M. Bills using MessageEntry = std::pair<const char*, const Message>; 48*c5ba4c27SEd Tanous 49*c5ba4c27SEd Tanous inline void fillMessageArgs(const std::span<const std::string_view> messageArgs, 50*c5ba4c27SEd Tanous std::string& msg) 51*c5ba4c27SEd Tanous { 52*c5ba4c27SEd Tanous int i = 0; 53*c5ba4c27SEd Tanous for (const std::string_view& messageArg : messageArgs) 54*c5ba4c27SEd Tanous { 55*c5ba4c27SEd Tanous std::string argStr = "%" + std::to_string(i + 1); 56*c5ba4c27SEd Tanous size_t argPos = msg.find(argStr); 57*c5ba4c27SEd Tanous if (argPos != std::string::npos) 58*c5ba4c27SEd Tanous { 59*c5ba4c27SEd Tanous msg.replace(argPos, argStr.length(), messageArg); 60*c5ba4c27SEd Tanous } 61*c5ba4c27SEd Tanous i++; 62*c5ba4c27SEd Tanous } 63*c5ba4c27SEd Tanous } 64*c5ba4c27SEd Tanous 6570304cb5SJason M. Bills } // namespace redfish::message_registries 66