xref: /openbmc/bmcweb/redfish-core/include/registries.hpp (revision d5c80ad9c07b94465d8ea62d2b6f87c30cac765e)
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
17c5ba4c27SEd Tanous 
18*d5c80ad9SNan Zhou #include <array>
19*d5c80ad9SNan Zhou #include <cstddef>
20c5ba4c27SEd Tanous #include <span>
21c5ba4c27SEd Tanous #include <string>
22c5ba4c27SEd Tanous #include <string_view>
23*d5c80ad9SNan Zhou #include <utility>
24*d5c80ad9SNan Zhou 
25*d5c80ad9SNan Zhou // IWYU pragma: no_include <stddef.h>
26c5ba4c27SEd Tanous 
27fffb8c1fSEd Tanous namespace redfish::registries
2870304cb5SJason M. Bills {
29351d3063SJason M. Bills struct Header
30351d3063SJason M. Bills {
31351d3063SJason M. Bills     const char* copyright;
32351d3063SJason M. Bills     const char* type;
33351d3063SJason M. Bills     const char* id;
34351d3063SJason M. Bills     const char* name;
35351d3063SJason M. Bills     const char* language;
36351d3063SJason M. Bills     const char* description;
37351d3063SJason M. Bills     const char* registryPrefix;
38351d3063SJason M. Bills     const char* registryVersion;
39351d3063SJason M. Bills     const char* owningEntity;
40351d3063SJason M. Bills };
4170304cb5SJason M. Bills 
4270304cb5SJason M. Bills struct Message
4370304cb5SJason M. Bills {
4470304cb5SJason M. Bills     const char* description;
4570304cb5SJason M. Bills     const char* message;
46e7808c93SGunnar Mills     const char* messageSeverity;
47271584abSEd Tanous     const size_t numberOfArgs;
4870304cb5SJason M. Bills     std::array<const char*, 5> paramTypes;
4970304cb5SJason M. Bills     const char* resolution;
5070304cb5SJason M. Bills };
5170304cb5SJason M. Bills using MessageEntry = std::pair<const char*, const Message>;
52c5ba4c27SEd Tanous 
53c5ba4c27SEd Tanous inline void fillMessageArgs(const std::span<const std::string_view> messageArgs,
54c5ba4c27SEd Tanous                             std::string& msg)
55c5ba4c27SEd Tanous {
56c5ba4c27SEd Tanous     int i = 0;
57c5ba4c27SEd Tanous     for (const std::string_view& messageArg : messageArgs)
58c5ba4c27SEd Tanous     {
59c5ba4c27SEd Tanous         std::string argStr = "%" + std::to_string(i + 1);
60c5ba4c27SEd Tanous         size_t argPos = msg.find(argStr);
61c5ba4c27SEd Tanous         if (argPos != std::string::npos)
62c5ba4c27SEd Tanous         {
63c5ba4c27SEd Tanous             msg.replace(argPos, argStr.length(), messageArg);
64c5ba4c27SEd Tanous         }
65c5ba4c27SEd Tanous         i++;
66c5ba4c27SEd Tanous     }
67c5ba4c27SEd Tanous }
68c5ba4c27SEd Tanous 
69fffb8c1fSEd Tanous } // namespace redfish::registries
70